0205、Windows 逆向入门:寄存器、标志位与内存基础
这一部分开始真正进入 CPU 状态:寄存器保存当前执行环境,标志位保存运算结果特征,内存保存代码和数据。逆向时看懂这三类信息,就能知道程序“现在执行到哪里、刚才算出了什么、接下来会跳到哪里”。
1、内容范围
| 小节 | 内容 | 复盘点 |
|---|---|---|
| 02.5 | 寄存器 | 通用寄存器、段寄存器、指令指针寄存器 |
| 02.6 | 通用寄存器对应关系 | EAX/AX/AH/AL、RAX/EAX/AX/AL 的包含关系 |
| 02.7 | 寄存器包含关系测试 | 修改低位寄存器对高位的影响 |
| 02.8 | 段寄存器特性 | CS/DS/SS/ES/FS/GS 的基本用途 |
| 02.9 | 指令指针寄存器 | EIP/RIP 保存下一条指令地址 |
| 03.0 - 03.8 | 标志寄存器 | CF、PF、AF、ZF、SF、DF、OF 与 EFLAGS |
| 03.9 - 04.4 | 内存基础 | 内存特性、内存管理、端序、读写和寻址 |
2、通用寄存器
寄存器是 CPU 内部速度最快的小容量存储区域。入门阶段先掌握常见用途,不必一开始背完整架构手册。
| x86 | 常见用途 | x64 对应 |
|---|---|---|
EAX |
运算结果、返回值 | RAX |
EBX |
通用保存 | RBX |
ECX |
计数、循环、参数 | RCX |
EDX |
扩展运算、参数 | RDX |
ESI |
源地址、字符串操作 | RSI |
EDI |
目的地址、字符串操作 | RDI |
ESP |
栈顶指针 | RSP |
EBP |
栈帧基址 | RBP |
调试时最常看的是 EIP/RIP、ESP/RSP、EBP/RBP 和返回值寄存器。
3、寄存器包含关系
同一个寄存器可以按不同宽度访问。
1 | RAX |
复盘时要注意:修改 AL 只影响最低 8 位;修改 EAX 在 x64 下通常会把 RAX 高 32 位清零。这类细节会影响反汇编理解。
4、段寄存器
段寄存器在现代 Windows 用户态里不需要天天手算,但 FS/GS 很重要,因为它们常用于访问线程环境块或进程环境相关数据。
| 寄存器 | 入门理解 |
|---|---|
CS |
代码段 |
SS |
栈段 |
DS/ES |
数据段 |
FS/GS |
线程/系统相关结构常见入口 |
后面看 PEB、TEB、反调试和 x64 系统结构时,会再次遇到 FS/GS。
5、指令指针寄存器
EIP/RIP 指向下一条要执行的指令。普通代码不能直接像修改普通变量那样写 EIP,但跳转、调用、返回、异常处理都会改变它。
| 行为 | 对 EIP/RIP 的影响 |
|---|---|
| 顺序执行 | 指向下一条指令 |
jmp |
跳到目标地址 |
call |
保存返回地址后跳到函数 |
ret |
从栈中取返回地址 |
| 异常 | 进入异常处理流程 |
6、EFLAGS 与常见标志位
标志位是 CPU 对上一次运算结果的记录,条件跳转经常依赖它。
| 标志 | 名称 | 常见含义 |
|---|---|---|
CF |
Carry Flag | 无符号进位/借位 |
PF |
Parity Flag | 低 8 位 1 的个数是否为偶数 |
AF |
Auxiliary Carry | BCD 或低半字节进位相关 |
ZF |
Zero Flag | 运算结果是否为 0 |
SF |
Sign Flag | 结果最高位是否为 1 |
DF |
Direction Flag | 字符串指令方向 |
OF |
Overflow Flag | 有符号溢出 |
条件跳转的本质:先比较或测试,再根据标志位决定跳不跳。
7、内存特性
内存要同时看地址、内容、权限和所属区域。
| 维度 | 复盘问题 |
|---|---|
| 地址 | 当前访问的是哪里 |
| 内容 | 这一段字节代表数据还是指令 |
| 权限 | 可读、可写、可执行吗 |
| 区域 | 栈、堆、模块、映射还是私有内存 |
| 生命周期 | 这块内存什么时候有效 |
8、端序与内存读写
Windows x86/x64 常见小端序:低位字节存低地址。
1 | 数值:0x12345678 |
逆向时看到字节序列,必须先确认它是按什么宽度、什么端序解释。
9、内存寻址
常见寻址形式:
1 | mov eax, [ebp-4] |
| 部分 | 含义 |
|---|---|
| base | 基址寄存器 |
| index | 索引寄存器 |
| scale | 1、2、4、8 等比例 |
| disp | 固定偏移 |
数组、结构体、对象成员、本地变量都会落到这些寻址形式里。
10、学习检查清单
| 检查项 | 状态 |
|---|---|
能说出 EAX/ESP/EBP/EIP 的常见用途 |
待复盘 |
能解释 ZF/CF/SF/OF 对条件跳转的影响 |
待复盘 |
| 能看懂小端序整数在内存中的排列 | 待复盘 |
能根据 [base+index*scale+disp] 推测数组或结构体访问 |
待复盘 |
| 能在调试器里同时观察寄存器、标志位和内存窗口 | 待复盘 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Ruiqy~!











