当堆栈指针在功能组件中移位时可以访问什么?

时间:2016-02-25 19:02:48

标签: pointers assembly

下面是汇编代码的一部分,我很好奇最后一行的堆栈指针是什么?如果我没记错的话,当基指针以正值移位时,它会访问传递的参数,以及负值,可能的局部变量。从我所假设的,从堆栈指针上升堆栈,将访问同一函数中的局部变量?

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)

1 个答案:

答案 0 :(得分:3)

是的,那是访问本地变量的。在32位代码中,您永远不应该从堆栈指针访问负偏移,因此您无法区分本地和参数之间的区别。但是,您可以告诉前面的sub $0x20, %esp仅保留32个字节的本地空间和0x1c的空间属于此范围,因此它是本地的。