How's RSP decreased here?

0

Through debug,I found that when func called in main,RSP is decreased by 8 from 0x7fffffffe960 to 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   

Why calla func will make rsp decrease by 8?

UPDATE

(gdb) x/4x 0x7fffffffe960
0x7fffffffe960: 0x00000000  0x00000000  0xf401d994  0x00000034
assembly
gdb
asked on Stack Overflow Mar 28, 2011 by compile-fan • edited Mar 28, 2011 by compile-fan

1 Answer

1

It's because the return addresses are also 64 bits in size (eg. 0x0000000000400457). When you call func, that value is placed onto the stack and the stack pointer decremented by that amount.

answered on Stack Overflow Mar 28, 2011 by paxdiablo

User contributions licensed under CC BY-SA 3.0