文章目录
需要的基础知识
- 至少掌握一门编程语言:例如汇编、C语言…
- 对Windows API编程和Windows工作方式有所了解:《Windows程序设计》
字节序:多字节存储顺序
- 多字节数据存放顺序与CPU有关,微处理器中的存放顺序有大端存储(Big-Endian)和小端存储(Little-Endian)
- 常见的Intel系列使用的编码方式属于Little-Endian
- 某些RISC架构的CPU,如IBM的Power-PC等属于Big-Endian
- ARM架构的CPU是可以通过设置成是大端存储模式还是小端存储模式
将数据0x12345678存入到地址为1000H开始的内存中
小端存储模式:
1000H:0x78
1001H:0x56
1002H:0x34
1003H:0x12
大端存储模式:
1000H:0x12
1001H:0x34
1002H:0x56
1003H:0x78
字符集
- ASCII码:真正的美国标准
- Unicode码:有3套编码方式:UTF-16、UTF-8、UTF-32
- ASCII码是Unicode码的一部分
- ASCII码 – ASCII扩展码 – 多字节编码 – Unicode编码(UTF-16、UTF-8、UTF-32)
Windows API:系统编程接口
- Windows API就是Windows应用程序接口,是针对Windows操作系统家族的
系统编程接口
,即调用Windows API就是系统调用syscall - Windows API被设计为各种编程语言(C、Java、汇编、易语言…)的程序调用,也是应用程序与Windows操作系统最直接的交互方式
动态链接库
- 所谓动态链接库就是把一些经常会公用的代码制成DLL文件
- 当可执行文件调用到DLL文件内的函数时,Windows操作系统才会把DLL文件加载到内存
- DLL文件本身的结构就是可执行文件(PE结构),当程序要求函数才进行链接,通过动态链接方式,存储器浪费的情形将可大幅度降低
Windows中三大DLL
- kernel32.dll:控制这系统的内存管理、数据的输入输出操作和中断处理,当Windows启动时,kernel.dll就驻留在内存中特定的写保护区域,是别的程序无法占用这个内存区域
- user32.dll:Windows用户界面相关应用程序接口,用于包括Windows处理,基本用户界面等特性,如创建窗口和发送消息
- gdi32.dll:是Windows GDI图形用户界面相关的程序,包含的函数用来绘制图像和显示文字
句柄HANDLE
- 句柄是整个Windows编程的基础,一个句柄是指使用一个唯一的整数值,用于标志应用程序中不同对象和同类对象中的不同实例,例如,一个窗口、按钮、图标、滚动条、输出设备、控制或者文件等,应用程序能够通过句柄访问相应的对象信息
- 句柄是Windows用来标志应用程序中建立的或是使用的唯一整数,Windows使用了大量的句柄来标识很多对象
Windows运行机制:消息机制+动态链接
Windows NT/2000/XP与Unicode
- NT架构从内核到KERNEL32、USER32、GDI32都是纯32位实现
- NT架构标准字符集重头开发,统一使用Unicode字符集,兼容ASCII字符集
Windows API函数与函数调用约定
- __stdcall
vs
__cdecl
— 实参入栈都是从右到左
— __stdcall:被调函数平衡栈;__cdecl:主调函数平衡栈
匈牙利命名法
- 一种标识符的命令规则
回调函数(Don’t call me,I’ll call you!)
Windows消息机制
- Windows操作系统最大的特点就是其图形化的操作界面和多任务的管理,这些强大功能就是建立在其消息机制这个基础之上的。如果不理解Windows消息处理机制,肯定无法深入的理解Windows编程
- Windows操作系统与应用程序之间、应用程序与应用程序之间的通讯就是通过消息来触发,并靠对消息的响应和处理来完成
- Windows系统中有两种消息队列:一是系统消息队列,另一种是应用程序的消息队列(每一个UI线程都会有一个消息队列)
- 由于Windows本身是由消息驱动的,所以我们调试程序时跟踪一个消息会得到相当底层的答案
- Windows操作系统为当前执行的每个Windows应用程序的每个UI线程维护一个消息队列。在发生事件之后,Windows操作系统将该事件转换为一个消息,并将消息投放到目标应用程序的目标UI线程的消息队列中。应用程序通过执行一块称之为消息循环的程序代码从消息队列中取出消息
主动激励,被动响应
:用户主动触发事件 --> 操作系统感知事件并将事件封装成消息发送到目标应用程序的目标UI线程的消息队列中 --> 应用程序通过消息循环获取消息,再将消息交给操作系统 --> 操作系统调用窗口过程函数进行消息响应
保护模式
x86的运行模式:实模式、保护模式、虚拟8086模式
基础篇
调试篇 OD、PEID、IDA、CE、W32ASM
系统篇 PE文件格式
逆向篇