美文网首页CTF从入门到精通ctfCTF
esp和ebp的在函数调用时的行为

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

作者: taiji1985 | 来源:发表于2018-08-22 20:32 被阅读11次

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

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

    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

    相关文章

      网友评论

        本文标题:esp和ebp的在函数调用时的行为

        本文链接:https://www.haomeiwen.com/subject/xafuiftx.html