该文章为读《逆向工程核心原理》笔记
X86
介绍
一共有四种:
- 通用寄存器(32位):
- EAX:累加器(针对操作数和结果数据)
- EBX:基址寄存器(DS段钟的数据指针)
- ECX:计数器(字符串和循环操作,每循环一次-1)
- EDX:数据寄存器(I/O指针)
- EDI:目的变质寄存器
- ESI:源变址寄存器
- EBP:基址寄存器
- ESP:栈指针寄存器(PUSH、POP、RETN、CALL指令可以直接修改)
- 段寄存器(16位):
- CS:代码段寄存器
- DS:栈段寄存器
- SS:数据段寄存器
- ES:附加(数据段)寄存器
- FS:数据段寄存器:程序调试,计算SHE、TEB、PEB等地址
- GS:数据段寄存器
- 程序状态与控制寄存器(32位):EFLAGS:32个标志位
- ZF:是否是0:结果是0,置为1
- OF:溢出:有符号整数溢出 or MSB改变时,为1
- CF:进位:无符号整数溢出,为1
- 指令指针寄存器(32位):EIP:存储下一条要执行的指令的地址,CPU获取EIP内容后,EIP自动+指令的字节大小
寄存器
- 通用寄存器
- 段寄存器
IA-32的保护模式中,段是一种内存保护技术,它把内存划分为多个区段,并为每个区段赋 予起始地址、范围、访问权限等,以保护内存。 此外,它还同分页技术 ( Paging )一起用于将虚 拟内存变更为实际物理内存。 段内存记录在SDT ( Segment Descriptor Table,段描述符表 )中, 而段寄存器就持有这些SDT的索引( index )。
- 程序状态与控制寄存器
x86
- 通用寄存器
x64系统中,通用寄存器的大小扩展到64位 ( 8个字节),数量也增加到18个 (新增了R8~ R15 寄存器)。 x64系统下的所有通用寄存器的名称均以字母 R 开头( x86以字母“E”开头 )
支持访问寄存器的8、16、32位(如AL,AH,AX,EAX)
64位本地模式中,不使用段寄存器:CS,SS,DS,FS,GS,仅限于向下兼容32位