汇编中esp和ebp在函数栈空间的保存和变化 call的参数和局部变量的关系详解

本文详细介绍了函数调用过程中的栈帧管理,包括ESP和EBP寄存器的作用,参数和局部变量的存储位置,以及如何在OD中查看栈空间。在函数调用时,ESP指向栈顶,EBP保存栈底,参数通常从EBP+8开始依次存放,局部变量则在EBP下方分配。在子程序结束时,通过PUSH和POP操作恢复上一层EBP,使用RETN指令返回。

esp

call执行跳入子程序以后栈顶寄存器,一直指向栈顶

ebp

call执行过跳入子程序以后,一直指向栈底

看下面例子模拟一个有2个参数的函数.例如函数参数1是1, 参数2是2

push 2 //参数2
push 1 //参数1
call 子程序地址

在这里插入图片描述

//子程序开始以后的栈的内容操作如下图红框出是call的下一条语句的地址,这个地址会被首先压入栈顶,如下图
在这里插入图片描述
压入栈顶之后如下图
在这里插入图片描述

上面图栈顶显示是:"返回到"这个就是外面call的下一条语句的地址 ,这样当子程序结束的时候可以通过retn语句的时候 找到call下面的语句,.因为retn语句,等于pop eip,然后cpu就会执行eip里的语句

上一层ebp和本层ebp的保存方法

首先要明白为什么要保存上一层eb

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值