2016-02-25 75 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属于这个范围,因此它是本地的。