1. 程式人生 > >ebp esp與堆疊

ebp esp與堆疊

一般的說法ebp指向棧底,esp指向棧頂

從堆疊的概念來講,壓棧就是把資料放到棧頂上面,於是棧頂又增長

不過悲劇的x86堆疊要倒著長,如果以為push以後esp會增加可就大錯特錯了。。ebp雖然叫棧底,但是永遠大於等於棧頂

每push一個值,esp相應減小

從地址角度看,棧頂在下面,棧底在上面。。乾脆管ebp叫棧頂好了,不知道誰最先定義的名字,我就認為棧是從棧底壓棧又怎麼了。。本來也是為了好理解,現在更難理解

坑爹

另外在函式呼叫時:

進入前:從右向左依次壓棧傳入的引數,然後壓棧返回地址

剛進入:push ebp,然後更新esp給ebp,這樣可以迅速的找到傳入的引數,以及回去的地址(就壓棧在了esp的上面),同時ebp指向了呼叫這個函式的函式的ebp。在gdb時bt就是這樣層層遞推,獲得呼叫函式的。

返回時的leave就是執行相反動作就好