栈工作原理

我是研究僧i 提交于 2020-01-22 00:14:38
 
【工作过程】
函数调用
ØPUSH arg[]
ØPUSH EIP
ØPUSH EBP
1、参数入栈:将参数依次压入系统栈中;
2、返回地址入栈:将当前代码区调用指令的下一条指令地址压入栈中,供函数返回时继续执行;
ØEBP = ESP
ØESP = ESP - K
 
3、保存当前栈帧的EBP入栈;
4、将当前栈帧切换到新栈帧,ESP值装入EBP,更新栈帧底部;
5、给新栈帧分配空间,把 ESP减去所需空间的大小,抬高栈顶。
 
函数返回
ØEAX = rst
ESP = ESP +
1保存返回值:通常将函数的返回值保存在寄存器EAX中;
2在堆栈平衡的基础上,给ESP加上栈帧的大小,回收栈空间;
ØPOP EBP
ØPOP EIP
3、将当前栈帧底部保存前栈帧EBP值送入EBP寄存器,恢复前栈帧;
4、将函数返回地址送入EIP寄存器。
Ø恢复堆栈平衡
 
 
 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!