一直对寄存器ESP和EBP的概念总是有些混淆,查看定义ESP是栈顶指针,EBP是存取堆栈指针。还是不能很透彻理解。之后借于一段汇编代码,总算是对两者有个比较清晰的EIP(instruction pointer):EIP寄存器,用来存储CPU要读取指令的地址,CPU通过EIP寄存器读取即将要执行的指令。每次CPU执行完相应的汇编指令之后,EIP寄存器的值就会增加。
EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP寄存器详解参考⼀:⼀般寄存器:AX、BX、CX、DX AX:累积暂存器,BX:基底暂存器,CX:计数暂存器,DX:资料暂存器索引暂存器:SI、DI SEIP存储着下一条指令的地址,每执行一条指令,该寄存器变化一次。EBP存储着当前函数栈底的地址,栈底通常作为基址,我们可以通过栈底地址和偏移相加减来获取变量地址(很重要)。ESP就
ebp:栈底指针,指向栈的底部,通常用ebp+偏移量的形式来定位函数存放在栈中的局部变量edi:字符串操作时,用于存放数据源的地址esi:字符串操作时,用于存放目的地址的,和edi两个经常搭ebp寄存器的值在(1)中入栈,在(5)中出栈。这主要是为了把函数中用到的ebp寄存器的内容,恢复到函数调用前的状态。CPU拥有的寄存器是有数量的限制的。在函数调用前,调用源有可能已经在
EBP寄存器源操作数的寻址方式为基址变址寻址。EDI为目的变址寄存器(Destination Index Register),用于指向字符串或数组的目的操作数。EBP为基址指针寄存器(Base Pointer Register所以EBP寄存器可以用来追踪我们的函数调用链,从而定位相关出错问题。调用过程上面介绍了调用栈,这里具体来看看一个函数调用链的怎么形成的。根据栈帧的结构图,首先将参数入栈。执行完这个函数