逆向工程核心原理-第四章 IA-32寄存器基本讲解
了解寄存器
主要分为四类
- 通用寄存器(32bit , 8个)
- 段寄存器(16bit , 6个)
- 程序状态与控制寄存器(32bit , 1个)
- 指令指针寄存器(32bit , 1个)
高版本的寄存器实现兼容(16bit跟8bit)
- EAX : (0~31) 32位
- AX : (0~15) EAX 的低16位(为什么只有一个 ? 因为一个就够了)
- AH : (8~15) AX的高8位
- AL: (0~7) AX 低8位
通用寄存器的特殊功能
- EAX:(针对操作数和结果数据的)累加器
- EBX:(DS段中的数据指针)基址寄存器
- ECX:(字符串和循环操作的)计数器
- EDX:(1O指针)数据寄存器
但是,主要功能还是暂存数据和数据的运算
通用寄存器的其他寄存器(指针)
- EBP : (SS段中站内数据指针) 拓展基址指针寄存器
- ESI:(字符串操作源指针)源变址寄存器
- EDI:(字符串操作目标指针)目的变址寄存器
- ESP: ( SS段中栈指针)栈指针寄存器
段寄存器
- CS:Code Segment,代码段寄存器
- SS: Stack Segment,栈段寄存器
- DS:Data Segment,数据段寄存器
- ES: Extra ( Data ) Segment,附加(数据)段寄存器
- FS: Data Segment,数据段寄存器
- GS:Data Segment,数据段寄存器
目前只需要知道CS , SS , DS 就行了
程序状态与控制寄存器
EFLAGS: Flag Register, 标志寄存器
EFLAGS的每一位都具有意义(或者说是个众多开关的集合,这些开关只有Ture跟False两个状态)
现在仅需要知道的Flag
- ZF (Zero Flag,零标志)
- OF ( Overflow Flag,溢出标志)
- CF ( Carry Flag,进位标志)。
对于跳转而言,非常重要
指令指针寄存器(EIP)
EIP的值不能直接修改,但是可以通过汇编指令(JMP , JCC , CALL , RET)来进行改变