通用寄存器
64位通用寄存器
x64 架构扩展了原有的 32 位寄存器,并新增了 8 个通用寄存器:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| RAX - 累加器 (Accumulator)
RBX - 基址寄存器 (Base)
RCX - 计数器 (Counter)
RDX - 数据寄存器 (Data)
RSI - 源索引 (Source Index)
RDI - 目标索引 (Destination Index)
RBP - 基址指针 (Base Pointer)
RSP - 栈指针 (Stack Pointer)
R8 - 通用寄存器 8
R9 - 通用寄存器 9
R10 - 通用寄存器 10
R11 - 通用寄存器 11
R12 - 通用寄存器 12
R13 - 通用寄存器 13
R14 - 通用寄存器 14
R15 - 通用寄存器 15
|
寄存器访问规则
每个 64 位寄存器可以按不同大小访问:
1
2
3
4
5
6
7
8
9
10
| RAX (64位) - 完整寄存器
EAX (32位) - 低32位
AX (16位) - 低16位
AH (8位) - 高8位
AL (8位) - 低8位
R8 (64位) - 完整寄存器
R8D (32位) - 低32位
R8W (16位) - 低16位
R8B (8位) - 低8位
|
段寄存器
在 64 位模式下,段寄存器的作用有所改变:
1
2
3
4
5
6
| CS - 代码段 (Code Segment)
DS - 数据段 (Data Segment)
ES - 附加段 (Extra Segment)
SS - 栈段 (Stack Segment)
FS - 文件段 (File Segment)
GS - 全局段 (Global Segment)
|
特殊用途:
- FS:[0x30] - 指向 PEB (Process Environment Block)
- GS:[0x60] - 指向 TEB (Thread Environment Block)
标志寄存器
RFLAGS 寄存器包含多个状态标志:
1
2
3
4
5
6
7
8
9
| CF (位 0) - 进位标志
PF (位 2) - 奇偶标志
AF (位 4) - 辅助进位
ZF (位 6) - 零标志
SF (位 7) - 符号标志
TF (位 8) - 陷阱标志
IF (位 9) - 中断启用
DF (位 10) - 方向标志
OF (位 11) - 溢出标志
|
控制寄存器
x64 架构的主要控制寄存器:
1
2
3
4
5
| CR0 - 控制处理器运行模式和状态
CR2 - 页面故障线性地址
CR3 - 页目录基址
CR4 - 处理器特性控制
CR8 - 任务优先级
|
CR0 重要位
1
2
3
| PE (位 0) - 保护模式启用
WP (位 16) - 写保护
PG (位 31) - 分页启用
|
特殊用途寄存器
指令指针
特点:
XMM 寄存器
用于 SIMD 操作:
1
2
3
| XMM0-XMM15 (128位)
YMM0-YMM15 (256位) - AVX 扩展
ZMM0-ZMM31 (512位) - AVX-512 扩展
|
Windows x64 调用约定
参数传递
前 4 个参数使用寄存器传递:
- RCX - 第一个参数
- RDX - 第二个参数
- R8 - 第三个参数
- R9 - 第四个参数
其余参数通过栈传递。
寄存器保护
易失寄存器(调用者保存):
- RAX, RCX, RDX, R8-R11
- XMM0-XMM5
非易失寄存器(被调用者保存):
- RBX, RBP, RDI, RSI, R12-R15
- XMM6-XMM15
调试技巧
寄存器监控
1
2
3
4
5
6
7
8
| 1. 使用调试器监视寄存器
- !reg 命令查看所有寄存器
- r 命令查看特定寄存器
2. 常见断点
- 硬件断点(DR0-DR7)
- 内存断点
- 条件断点
|
性能优化
寄存器使用优化
SIMD 优化
安全注意事项
寄存器清零
栈保护
异常处理