CTF从入门到精通ctfCTF

esp和ebp的在函数调用时的行为

2018-08-22  本文已影响11人  taiji1985

首先,高级语言的栈是从高地址向低地址增长的,为什么这样?

代码啥的在低地址,栈在高地址,这样就会向中间增长。

esp永远指向栈顶元素。不是指向没有数据的空地址。

push时,先减四后赋值

ebp永远指向栈底元素。他一般存储了上一个函数的ebp。

进入函数中,先push ebp

再mov ebp,esp 这时俩寄存器都指向保存的上个函数的ebp的值。

下面esp减去一大块,为临时变量流出空间。

离开函数时执行

leave时,他的作用与上面的相反,相当于

mov esp,ebp  让esp指向当前的栈底

pop ebp 将栈顶(esp指向的内存)的值给ebp这样,就恢复了上个函数调用此函数至少得值,esp因为弹栈而加四,然后指向的是返回地址。

随后执行ret,ret指令相当于

pop eip 即将栈顶的值(esp指向的内容)复制给eip指令寄存器。esp+4

上一篇下一篇

猜你喜欢

热点阅读