0
經過調試,我發現,當調用main
func
,RSP
是8
從0x7fffffffe960
到0x7fffffffe958
下降:RSP如何減少?
(gdb) disas func
Dump of assembler code for function func:
0x0000000000400448 <func+0>: push %rbp
0x0000000000400449 <func+1>: mov %rsp,%rbp
0x000000000040044c <func+4>: mov $0x1,%eax
0x0000000000400451 <func+9>: leaveq
0x0000000000400452 <func+10>: retq
End of assembler dump.
(gdb) disas main
Dump of assembler code for function main:
0x0000000000400453 <main+0>: push %rbp
0x0000000000400454 <main+1>: mov %rsp,%rbp
0x0000000000400457 <main+4>: callq 0x400448 <func>
0x000000000040045c <main+9>: mov $0x6,%eax
0x0000000000400461 <main+14>: leaveq
0x0000000000400462 <main+15>: retq
爲什麼calla func
將8
使rsp
下降?
UPDATE
(gdb) x/4x 0x7fffffffe960
0x7fffffffe960: 0x00000000 0x00000000 0xf401d994 0x00000034
爲什麼返回地址0x0000000000400457是8字節,但寄存器rsp(0x7fffffffe960 )只有6個字節? – 2011-03-28 15:47:36
@編譯風扇,它不是6字節,它是8.它只是_displaying_ 6,但這將是調試器的決定。即使寫入0x400457(沒有前導零),該返回地址仍然是8個字節。 – paxdiablo 2011-03-28 16:11:11
實際上它是0x00007fffffffe960,如果你想計算,它是八個字節。一些非常聰明的人早些時候決定可以省略前導零 – hirschhornsalz 2011-03-28 16:27:56