汇编ESP、EBP的理解

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 中。


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


        








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值