Как RSP здесь снизился? - PullRequest
0 голосов
/ 28 марта 2011

В результате отладки я обнаружил, что когда func вызывается main, RSP уменьшается на 8 с 0x7fffffffe960 до 0x7fffffffe958:

(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уменьшит rsp на 8?

ОБНОВЛЕНИЕ

(gdb) x/4x 0x7fffffffe960
0x7fffffffe960: 0x00000000  0x00000000  0xf401d994  0x00000034

1 Ответ

1 голос
/ 28 марта 2011

Это потому, что адреса возврата также имеют размер 64 бита (например, 0x0000000000400457).Когда вы вызываете func, это значение помещается в стек, а указатель стека уменьшается на эту величину.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...