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個字節。 –