逆向入门-寄存器
引言
- 寄存器是位于CPU内部的高速存储单元,作为计算机存储层次结构中最顶层的存储形式,寄存器提供了最快的访问速度,是CPU执行指令和处理数据的核心工作区域。在逆向和pwn中记住这些寄存器是最基础的。
寄存器的类型
1. 通用寄存器
用于存储临时数据和中间计算结果,如x86架构中的EAX、EBX、ECX、EDX等。
x86-64 核心通用寄存器列表
64 位 | 32 位 | 16 位 | 8 位(低) | 用途 |
---|---|---|---|---|
RAX | EAX | AX | AL | 累加器 |
RBX | EBX | BX | BL | 基址寄存器 |
RCX | ECX | CX | CL | 计数器(循环/移位) |
RDX | EDX | DX | DL | 数据寄存器 |
RSI | ESI | SI | SIL | 源索引(字符串操作) |
RDI | EDI | DI | DIL | 目标索引(字符串操作) |
RBP | EBP | BP | BPL | 栈帧基址指针 |
RSP | ESP | SP | SPL | 栈指针 |
R8-R15 | R8D-R15D | R8W-R15W | R8B-R15B | 扩展寄存器 |
通用寄存器的用途
通用寄存器有厂商建议的用途,但事实上你可以随意的使用它们(如果你喜欢手搓汇编程序的话😊),一般使用编译器生成的程序都会遵守建议的用途
2. 专用寄存器
- 程序计数器(PC):存储下一条要执行指令的地址
- 指令寄存器(IR):存储当前正在执行的指令
- 堆栈指针(SP):指向当前堆栈顶部的地址
- 基址指针(BP):用于访问函数参数和局部变量
- 标志寄存器(FLAGS):存储CPU状态信息(如零标志、进位标志等)
3. 浮点寄存器
专门用于浮点运算,如x87 FPU寄存器栈。
4. 向量寄存器
支持SIMD(单指令多数据)操作,如SSE和AVX寄存器。
总结
- 在逆向和pwn中记住这些寄存器是最基础的
- 标志寄存器FLAGS很难记但是很重要
- 下一节介绍汇编基础