esp ebp 与 pop push与函数调用

2020-06-21  本文已影响0人  blank_white
c++代码.png
add函数开始
跳转到add内部
image.png image.png

栈初始 栈底=栈顶 ,栈顶是低地址
所以 push 栈顶值会减小

  1. 根据函数调用约定 参数入栈 push
push 0x5
push 0x3

调用 call 会 push 当前 EIP

push ebp 将原来的栈底的值先 push 保存
mov ebp,esp  将当前栈顶 视为 函数内的栈底
sub esp,0x1C  将栈顶抬高,为函数内局部变量留出存储空间

...
...
...
函数结束

mov esp,ebp  将栈顶还原(由于函数内的栈底 是原来的栈顶值)
pop ebp  将栈底值还原

retn 会 pop eip

因为push了两个参数为了保持堆栈平衡,call结束回来后

add esp,0x8
上一篇 下一篇

猜你喜欢

热点阅读