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

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

被折叠的 条评论
为什么被折叠?



