この単純なプログラムを実行しようとしています:
int main (void) {
__asm__ ("mov 123, %rax");
return 0;
}
問題なくコンパイルさobjdump
れ、結果が期待どおりであることを確認します。
00000000004004ec <main>:
4004ec: 55 push %rbp
4004ed: 48 89 e5 mov %rsp,%rbp
4004f0: 48 8b 04 25 7b 00 00 mov 0x7b,%rax
4004f7: 00
4004f8: b8 00 00 00 00 mov $0x0,%eax
4004fd: 5d pop %rbp
4004fe: c3 retq
4004ff: 90 nop
ただし、プログラムを実行すると、実行時に正確にセグメンテーション違反が発生しmov 0x7b,%rax
ます。を使用しても同じことが起こります%eax
。なぜだろう?