次のアセンブリプログラムがあります。
.globl main
main:
push %rbp
mov %rsp, %rbp
movb $8, -1(%rbp)
movw $30, -4(%rbp)
mov -1(%rbp), %rax
add -4(%rbp), %rax
call func
pop %rbp
ret
func:
push %rbp
mov %rsp, %rbp
movl $7, -4(%rbp)
mov -4(%rbp), %rbx
pop %rbp
ret
プログラムをステップ実行するとき、以前は $0x0800001e` (8 バイト、0 バイト、0 バイト、30 バイト) だった の値にアクセスしようとした後、call func
前に、すべてゼロが表示されるようになりました。push %rbp
rbp
>>> x/1xw $rbp-4
0x7fffffffe410: 0x00000000
なぜこれが起こるのですか?rbp
関数呼び出し間で値をリセットしますが (アドレスは保持します) ?