【工作过程】
函数调用
Ø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寄存器。
Ø恢复堆栈平衡
来源:CSDN
作者:跃然实验室
链接:https://blog.csdn.net/dyxcome/article/details/104066081