现在的位置: 首页 > 综合 > 正文

汇编ESP、EBP的理解

2014年02月09日 ⁄ 综合 ⁄ 共 584字 ⁄ 字号 评论关闭

1、ESP 栈顶指针。用于指向栈的栈顶(下一个压入栈的活动记录的顶部)。

   理解:当栈为空的时候,ESP指向的是顶部。esp = 0xFFFF。pop入栈之后的esp = 0xFFFF - 0x04 

2、EBP:帧指针,指向当前活动记录的顶部。通常用于访问局部变量

3、Call:子程序调用指令。call 指令执行时,会先将EIP压入堆栈,保存子程序的返回地址。


eg:

function proc data_1, data_2
push ebp
mov ebp,esp
mov eax, [ebp+0x08]
mov ebx, [ebp+0x0c]


push 0x05
push 0x07
call function


第一次push 之后,esp + 4

第二次push 之后,esp + 8

call 调用之后,esp + 0x0C

进入子程序之后,push ebp 之后 esp + 0x10 。再执行mov ead,
[ebp+0x08]的时候,过程如下

        可以理解为 :先去ebp + 0x08的地址取出一个字节的数据,然后再去ebp
+ 0x09 取出一字节数据。。。。。依此类推直至去玩四字节。

        但是mov 指令实际的执行状态为直接去取四字节的数据。

mov eax, [esp] 中 esp 指向的下一个将要入栈的地址。而mov
指令会将当前地址以及紧邻的高四字节的地址数据取出。放入eax 中。


以上完全是个人为了帮助理解堆栈平衡而写,没有关注语法、逻辑上得错误。


        



抱歉!评论已关闭.