從這個網站: http://eli.thegreenplace.net/2011/02/04/where-the-top-of-the-stack-is-on-x86/ 我看到這個程序堆棧:爲什麼基指針值存儲在堆棧
int foobar(int a, int b, int c)
{
int xx = a + 2;
int yy = b + 3;
int zz = c + 4;
int sum = xx + yy + zz;
return xx * yy * zz + sum;
}
int main()
{
return foobar(77, 88, 99);
}
在內存中看起來像下面的圖片:
我不明白爲什麼基址指針需要從堆棧中獲取內存,是否不能像堆棧指針那樣只存儲在寄存器中,只需指向他需要的地方? (我知道基址指針用於在堆棧指針產生推送和彈出時更容易找到變量,但我不明白爲什麼它的值存儲在堆棧中,而不僅僅是寄存器中!),非常感謝您的幫助(恐怕我錯過了一些非常重要的東西)
編輯: 可能是這有助於更多我的困惑:在圖像中,他們顯示'EBP'(寄存器)和'saved ebp'。我不明白爲什麼有兩個...
爲什麼返回地址必須存儲在堆棧中,而不是寄存器中? – MikeCAT
我知道basepointer已經有一個寄存器EBP,但是返回地址沒有。在圖片中他們顯示'EBP'(註冊)和'保存的ebp'。我不明白爲什麼有兩個... – Samuel
基地/框架指針工作像一個鏈表; EBP指向當前基指針,當前基指針指向前一個基指針,依此類推。 – melak47