逆向工程核心原理-IA-32寄存器

IA-32由四类寄存器组成:通用寄存器,段寄存器,程序状态与控制寄存器,指令指针寄存器。

通用寄存器:用于传送和暂存数据,也可参与算数逻辑运算,并保存运算结果。

  EAX(0-31) 32位          AX  (0-15)  EAX的低16位         AH (8-15) AX的高8位             AL(0-7) AX的低8位

  EAX:针对操作数和结果数据的   累加器              EAX一般用在函数返回值中,所有win32API函数都会先把返回值保存到EAX再返回。

  EBX:DS段中的数据指针         基址寄存器

  ECX:字符串和循环操作的         计数器

  EDX:I/O指针                           数据寄存器

  EBP:SS段中栈内数据指针     扩展基址指针寄存器

  ESI:字符串操作源指针     源变址寄存器

  EDI:字符串操作目标指针      目的变址寄存器

  ESP:SS断中栈指针               栈指针寄存器                  ESP指向栈顶地址

段寄存器:段寄存器总共有6种寄存器,分别为cs,ss,ds,es,fs,gs。

  CS:Code Segment    代码段寄存器     存放应用程序代码所在段的段基址

  SS:Stack Segment   栈段寄存器      存放栈段的段基址

  DS:Data Segment     数据段寄存器     存放数据段的段基址

  ES:Extra(Data)Segment      附加(数据)段寄存器    以下都是存放附加数据段的段基址

  FS:Data Segment      数据段寄存器

     GS:Data Segment    数据段寄存器

   FS寄存器用于计算SEH(Structured Exception Handler,结构化异常处理机制)、TEB(Thread Environment Block,线程环境块)、PEB(Process Environment Block,进程环境块)等地址,这些属于高级调试技术。

程序状态与控制寄存器:

  EFLAGS:Flag Register, 标志寄存器            共有32位元,每位都有特定的含义。

  ZF:Zero Flag,零标志       若运算结果为0,则其值为1,否则为0.

  OF:Overflow Flag,溢出标志    有符号整数溢出时,OF值被置为1。此外,MSB(最高有效位)改变时,其值也被设为1。

  CF:Carry  Flag,进位标志     无符号整数溢出时,其值也被置为1。

指令指针寄存器:

  EIP:Instruction Pointer,指令指针寄存器    保存着CPU要执行的指令地址,EIP只能间接修改,还可以通过中断或异常来修改EIP的值。

posted @ 2019-04-23 23:18  s1lenc3  阅读(422)  评论(0编辑  收藏  举报