ebp esp与堆栈

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


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


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


每push一个值,esp相应减小


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


坑爹


另外在函数调用时:

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

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


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

posted @ 2012-04-11 23:34  mosakashaka  阅读(176)  评论(0编辑  收藏  举报