0
我正在研究一个计算机系统检查问题,要求在程序中的各个点上的堆栈指针偏移量,我对如何设置堆栈帧感到困惑。我已经在32位和64位系统之间学习了几个星期的程序集,但是我还没有看过一条指令来指示栈指针。ANDing堆栈指针
有人可以解释这个服务的目的是什么,第四条指令后%esp
的偏移量和我计算的%esp
正确吗?我已经在代码中注释了我认为在每条指令之后偏移量的值。
main:
0x0x0804848a <+0>: push %ebp ;-0x4
0x0x0804848b <+1>: mov %esp, %ebp
0x0x0804848d <+3>: and $0xfffffff0, %esp ;[-0x4, -0x13]
0x0x08048490 <+6>: sub $0x20, %esp ;[-0x24, -0x33]
0x0x08048493 <+9>: movl $0xa, 0x1c(%esp)
0x0x0804849b <+17>: movl $0xa, (%esp)
0x0x080484a2 <+24>: call 0x804841d <r> ;[-0x28, -0x37]
它意味着将sp设置为16字节对齐的地址。下一条指令现在分配8个整数。 –
实际上是16个字节。 –