以下のようなプログラムを作ってみました。
#include <stdio.h>
int main(){
int i = 9;
printf("%d", i);
return 0;
}
これを逆アセンブルしたところ以下のようになりました。
0000000100000f50 <_main>:
100000f50: 55 push %rbp
100000f51: 48 89 e5 mov %rsp,%rbp
100000f54: 48 83 ec 10 sub $0x10,%rsp
100000f58: 48 8d 3d 47 00 00 00 lea 0x47(%rip),%rdi # 100000fa6 <_main+0x56>
100000f5f: c7 45 fc 00 00 00 00 movl $0x0,-0x4(%rbp)
100000f66: c7 45 f8 09 00 00 00 movl $0x9,-0x8(%rbp)
100000f6d: 8b 75 f8 mov -0x8(%rbp),%esi
100000f70: b0 00 mov $0x0,%al
100000f72: e8 0d 00 00 00 callq 100000f84 <_main+0x34>
100000f77: 31 f6 xor %esi,%esi
100000f79: 89 45 f4 mov %eax,-0xc(%rbp)
100000f7c: 89 f0 mov %esi,%eax
100000f7e: 48 83 c4 10 add $0x10,%rsp
100000f82: 5d pop %rbp
100000f83: c3 retq
int i = 9; の部分が movl $0x9,-0x8(%rbp) に相当するのはわかるのですが、
この -0x8 は何ですか??
それと、前後の
lea 0x47(%rip),%rdi # 100000fa6 <_main+0x56>
movl $0x0,-0x4(%rbp)
と
mov -0x8(%rbp),%esi
mov $0x0,%al
この4つは何をしているのでしょうか??
教えてください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/09/10 04:17
2016/09/10 04:26
2016/09/10 06:20 編集