我正在做一个计算机系统考试复习题,要求知道程序中不同点处的堆栈指针偏移量,我对堆栈框架是如何设置的感到困惑。我学习32位和64位系统之间的汇编已经有几个星期了,但我还没有看到堆栈指针的指令。
谁能解释一下这是为了什么目的,在第四条指令之后%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] 发布于 2017-02-25 23:41:06
如果你用一个从0x3开始的堆栈指针重复你的数学,你会得到启发。
对齐。许多CPU类型都需要对齐才能获得最佳性能,或者像SSE这样的向量指令才能正常工作。
https://stackoverflow.com/questions/42457980
复制相似问题