下面是汇编代码的一部分,我很好奇最后一行的堆栈指针是什么?如果我没记错的话,当基指针以正值移位时,它会访问传递的参数,以及负值,可能的局部变量。从我所假设的,从堆栈指针上升堆栈,将访问同一函数中的局部变量?
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)
答案 0 :(得分:3)
是的,那是访问本地变量的。在32位代码中,您永远不应该从堆栈指针访问负偏移,因此您无法区分本地和参数之间的区别。但是,您可以告诉前面的sub $0x20, %esp
仅保留32个字节的本地空间和0x1c
的空间属于此范围,因此它是本地的。