彙編可以將數據存儲在寄存器或堆棧中。只有堆棧的頂部可以在任何時候訪問(對吧?)。考慮下面的C代碼:組件如何訪問/存儲堆棧中的變量
main(){
int x=2;
func();
}
func(int x){
int i;
char a;
}
當打電話FUNC()被壓入堆棧以下(考慮32位系統):
variable x (4 bytes, pushed by main)
<RETURN ADDRESS> (4 bytes pushed by main?)
<BASE POINTER> (4 bytes pushed by func())
variable i (4 bytes, pushed by func())
variable a (1 byte, pushed by func())
我有以下問題:
在C代碼中,您可以從函數內的任何位置訪問本地變量,但是在彙編中,您只能訪問堆棧的頂部。 C代碼被翻譯成彙編(在機器代碼中,但彙編是它的可讀形式)。那麼程序集如何支持讀取不在棧頂的變量?
在我的例子中,我是否遺漏了任何會被推入堆棧的東西?
在程序集中,如果你推動堆棧上的一個char或一個int,它如何確定它需要推送4個字節還是1個字節?因爲它使用相同的操作(推)正確嗎?
在此先感謝 Gr。 Maricruzz
謝謝!是否也有可能在某處看到堆棧的當前內容?任何工具呢? – Maricruzz
@Maricruzz任何體面的調試器都應具有該功能。 –