这一部分从 x86 过渡到 x64。x64 不只是寄存器变宽,还涉及调用约定、栈布局、虚拟地址、WOW64、权限级别和页表转换等系统机制。

1、内容范围

小节 内容 复盘点
23.4 - 23.9 x64 路线与架构差异 指令拓展、WOW64、寄存器、虚拟地址、调用约定
24.0 - 24.5 x64 栈与地址 参数传递、栈空间、长跳、全局变量、指针宽度
24.6 - 24.9 手册与权限 Intel 手册、CPUID、Ring0/Ring3、标志寄存器
25.0 - 25.9 段/控制/调试寄存器 段选择子、描述符、CR0/CR2、页表、调试寄存器、地址大小
26.0 - 26.3 断点和动态调试 断点类型、单步、基础路线收尾

2、x64 寄存器

x64 增加了寄存器数量和宽度。

类型 示例
通用寄存器 RAXRBXRCXRDXR8-R15
指针寄存器 RSPRBPRIP
SIMD 寄存器 XMMYMM
标志寄存器 RFLAGS

3、WOW64

WOW64 让 32 位程序运行在 64 位 Windows 上。逆向时要区分目标进程是 x86、x64 还是 WOW64,否则寄存器、模块路径、调用约定都会看错。

4、x64 调用约定

Windows x64 常见前四个整数/指针参数:

1
RCX, RDX, R8, R9

调用者还要预留 shadow space,栈需要保持对齐。

5、栈结构变化

x64 下很多参数不再先压栈,而是先进寄存器。多余参数才放栈上。逆向函数参数时不能再机械套 x86 [ebp+8]

6、RIP 相对寻址

x64 常见 RIP 相对寻址:

1
mov rax, [rip+1234h]

它常用于访问全局变量、字符串和导入表相关地址。

7、虚拟地址与指针宽度

x64 指针通常 8 字节,但不是全部 64 位虚拟地址空间都可用。复盘时要区分虚拟地址、线性地址、物理地址和规范地址。

8、Ring0 与 Ring3

层级 含义
Ring3 用户态,普通应用程序
Ring0 内核态,驱动和内核代码

入门篇只建立概念,不做内核攻防展开。

9、控制寄存器与页机制

寄存器 复盘意义
CR0 保护模式、分页等控制位
CR2 页错误相关地址
CR3 页表基址
DR0-DR7 调试寄存器、硬件断点

这些内容后面看内存管理、断点、反调试会用到。

10、断点类型

类型 痕迹
软件断点 修改代码字节
硬件断点 使用调试寄存器
内存断点 页保护和异常
单步 Trap Flag 和调试异常

11、学习检查清单

检查项 状态
能区分 x86、x64、WOW64 调试视角 待复盘
能说出 Windows x64 前四个参数寄存器 待复盘
能解释 RIP 相对寻址 待复盘
能说明 Ring0/Ring3 的边界 待复盘
能区分软件断点、硬件断点和内存断点 待复盘