2016-02-25 33 views
0

下面是彙編代碼的一部分,我很好奇最後一行的堆棧指針正在訪問什麼?如果我沒有記錯,當基指針移動一個正值時,它將訪問傳遞的參數,以及負值,可能的局部變量。從我所假設的,從堆棧指針向上堆棧,將訪問同一個函數內的局部變量?堆棧指針在函數程序集中移位時可以訪問什麼?

main: 
0x0804848a <+0>: push %ebp 
0x0804848b <+1>: mov %esp,%ebp 
0x0804848d <+3>: and $0xfffffff0,%esp 
0x08048490 <+6>: sub $0x20,%esp 
0x08048493 <+9>: movl $0xa,0x1c(%esp) 

回答

3

是的,這是訪問本地變量。在32位代碼中,你絕對不應該從堆棧指針訪問負偏移量,所以你不能區分當地人和參數之間的區別。然而你可以知道前面的sub $0x20, %esp只是爲32字節的本地人預留的空間和0x1c屬於這個範圍,因此它是本地的。