寄存器的分类及功能

eax, ebx, ecx, edx, esi, edi, ebp, esp等都是X86 汇编语言中CPU上的通用寄存器的名称,是32位的寄存器。如果用C语言来解释,可以把这些寄存器当作变量看待。

比方说:add eax,-2 ; //可以认为是给变量eax加上-2这样的一个值。

这些32位寄存器有多种用途,但每一个都有各自的特别之处。

EAX:累加寄存器,相对于其他寄存器,在运算方面比较常用。

EBX:基地址寄存器,作为内存偏移指针使用。

ECX:计数器,用于特定的技术。

EDX:作为EAX的溢出寄存器,(除法产生的余数)。

EIP:存储CPU下次所执行的指令地址(存放指令偏移地址)。

ESP:指针的寄存器,用于堆栈操作。被形象地称为栈顶指针,堆栈的顶部是地址小的区域,压入堆栈的数据越多,ESP也就越来越小。在32位平台上,ESP每次减少4字节。

EBP:基址指针,指栈的栈底指针。

它最经常被用作高级语言函数调用的"框架指针"(frame pointer). 在破解的时候,经常可以看见一个标准的函数起始代码:
  
  push ebp ;保存当前ebp
  mov ebp,esp ;EBP设为当前堆栈指针
  sub esp, xxx ;预留xxx字节给函数临时变量.
  ...
  
  这样一来,EBP 构成了该函数的一个框架, 在EBP上方分别是原来的EBP, 返回地址和参数. EBP下方则是临时变量. 函数返回时作 mov esp,ebp/pop ebp/ret 即可.

ESI:在内存操作指令中作为“源地址指针”使用。

EDI:在内存操作指令中作为“目的地址”使用。

MOV:将源操作数送至目的操作数。

PUSH:入栈指令,将源操作数指定的字数据压入堆栈栈顶。

POP:出栈操作,将源操作数指定的字数据压入堆栈栈顶。

JMP:跳转至指定地址执行。

LEA:取有效地址(偏移地址)至寄存器。

CALL:将程序的执行交给其他代码段。

RET:子程序的返回指令。


你可能感兴趣的:(寄存器)