(備忘録)シンプルなCのソースコードをGCCでコンパイルして逆アセンブルする
シンプルなCのソースコードをコンパイルして逆アセンブルしていきます。
addintandint.c
extern int addintandint(int i ,int j)
{
return i + j;
}
extern int hoge()
{
return addintandint(3,2);
}
最適化をかけてコンパイルします
$ gcc -c -Og addintandint.c
逆アセンブル。Intel記法で行います
$ objdump -M intel -d addintandint.o >dump.txt
逆アセンブルできました。
addintandint.o: ファイル形式 elf64-x86-64
セクション .text の逆アセンブル:
0000000000000000 <addintandint>:
0: f3 0f 1e fa endbr64
4: 8d 04 37 lea eax,[rdi+rsi*1]
7: c3 ret
0000000000000008 <hoge>:
8: f3 0f 1e fa endbr64
c: be 02 00 00 00 mov esi,0x2
11: bf 03 00 00 00 mov edi,0x3
16: e8 00 00 00 00 call 1b <hoge+0x13>
1b: c3 ret
ちなみに以下のように最適化をかけないでコンパイルすると
$ gcc -c addintandint.c
以下のようにちょっとややこしくなります
addintandint.o: ファイル形式 elf64-x86-64
セクション .text の逆アセンブル:
0000000000000000 <addintandint>:
0: f3 0f 1e fa endbr64
4: 55 push rbp
5: 48 89 e5 mov rbp,rsp
8: 89 7d fc mov DWORD PTR [rbp-0x4],edi
b: 89 75 f8 mov DWORD PTR [rbp-0x8],esi
e: 8b 55 fc mov edx,DWORD PTR [rbp-0x4]
11: 8b 45 f8 mov eax,DWORD PTR [rbp-0x8]
14: 01 d0 add eax,edx
16: 5d pop rbp
17: c3 ret
0000000000000018 <hoge>:
18: f3 0f 1e fa endbr64
1c: 55 push rbp
1d: 48 89 e5 mov rbp,rsp
20: be 02 00 00 00 mov esi,0x2
25: bf 03 00 00 00 mov edi,0x3
2a: e8 00 00 00 00 call 2f <hoge+0x17>
2f: 5d pop rbp
30: c3 ret
謝辞:以下のサイトなどで教えていただいたyumetodoさん、Peter Cordesさんありがとうございました
Author And Source
この問題について((備忘録)シンプルなCのソースコードをGCCでコンパイルして逆アセンブルする), 我々は、より多くの情報をここで見つけました https://qiita.com/daisukeokaoss/items/396ab69eb6547f041c56著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .