ebp esp与堆栈

一般的说法ebp指向栈底,esp指向栈顶


从堆栈的概念来讲,压栈就是把数据放到栈顶上面,于是栈顶又增长


不过悲剧的x86堆栈要倒着长,如果以为push以后esp会增加可就大错特错了。。ebp虽然叫栈底,但是永远大于等于栈顶


每push一个值,esp相应减小


从地址角度看,栈顶在下面,栈底在上面。。干脆管ebp叫栈顶好了,不知道谁最先定义的名字,我就认为栈是从栈底压栈又怎么了。。本来也是为了好理解,现在更难理解


坑爹


另外在函数调用时:

进入前:从右向左依次压栈传入的参数,然后压栈返回地址

刚进入:push ebp,然后更新esp给ebp,这样可以迅速的找到传入的参数,以及回去的地址(就压栈在了esp的上面),同时ebp指向了调用这个函数的函数的ebp。在gdb时bt就是这样层层递推,获得调用函数的。


返回时的leave就是执行相反动作就好

原文地址:https://www.cnblogs.com/mosakashaka/p/12534686.html