objdumpコマンドはオブジェクトファイルの内容を表示できるコマンドになります。objdumpコマンドは実行ファイルやオブジェクトファイルを調査するのに便利なコマンドです。
objdumpコマンドでアーカイブファイルを指定するとそのアーカイブファイル内のそれぞれのオブジェクトファイルについての情報を表示できます。
目次
- 1 アーカイブファイルの内容を表示 (-aオプション)
- 2 逆アセンブル情報を表示 (-dオプション)
- 3 ソースコードを含めて逆アセンブル情報を表示 (-Sオプション)
- 4 行番号を表示 (-lオプション)
- 5 逆アセンブル情報に完全なアドレス情報を表示 (--prefix-addressesオプション)
- 6 ファイルのオフセット情報を表示 (-Fオプション)
- 7 全てのセクションの逆アセンブル情報を表示 (-Dオプション)
- 8 セクションを指定 (-jオプション)
- 9 セクションヘッダー情報を表示 (-hオプション)
- 10 デバッグ情報を表示 (-gオプション)
- 11 全てのセクションの内容を表示 (-sオプション)
- 12 全てのヘッダー情報を表示 (-xオプション)
- 13 動的シンボルテーブルを表示 (-Tオプション)
- 14 動的リロケーション情報を表示 (-Rオプション)
- 15 プログラムが必要とする共有ライブラリの表示
- 16 参考
アーカイブファイルの内容を表示
(-aオプション)
-aオプションを用いるとアーカイブファイルの内容を'ls -l'のような形式で表示できます。
コマンド例
1 |
objdump -a archive.a |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
In archive archive.a: file1.o: file format elf64-x86-64 rw-r--r-- 0/0 1496 Jan 1 09:00 1970 file1.o file2.o: file format elf64-x86-64 rw-r--r-- 0/0 1496 Jan 1 09:00 1970 file2.o file3.o: file format elf64-x86-64 rw-r--r-- 0/0 1496 Jan 1 09:00 1970 file3.o |
逆アセンブル情報を表示
(-dオプション)
objdumpコマンドで-dオプションを用いるとオブジェクトファイルの逆アセンブル情報を表示できます。
コマンド例
1 |
objdump -d prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: e8 00 00 00 00 callq 9 <main+0x9> 9: e8 00 00 00 00 callq e <main+0xe> e: e8 00 00 00 00 callq 13 <main+0x13> 13: b8 00 00 00 00 mov $0x0,%eax 18: 5d pop %rbp 19: c3 retq |
また、--start-addressオプションや--stop-addressオプションを利用すると表示する開始アドレスや終了アドレスを指定できます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
$ objdump -d --start-address=0x13 prog.o prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000013 <main+0x13>: 13: b8 00 00 00 00 mov $0x0,%eax 18: 5d pop %rbp 19: c3 retq $ objdump -d --stop-address=0x9 prog.o prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: e8 00 00 00 00 callq 9 <main+0x9> |
ソースコードを含めて逆アセンブル情報を表示
(-Sオプション)
-Sオプションを用いるとソースコードを含めた逆アセンブル情報を表示できます。
このオプションは、gccコマンドの-gオプション等を用いてデバッグ情報を含めてコンパイルする必要があります。
コマンド例
1 |
objdump -S prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main>: void func1(void); void func2(void); void func3(void); int main(void){ 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp func1(); 4: e8 00 00 00 00 callq 9 <main+0x9> func2(); 9: e8 00 00 00 00 callq e <main+0xe> func3(); e: e8 00 00 00 00 callq 13 <main+0x13> return 0; 13: b8 00 00 00 00 mov $0x0,%eax } 18: 5d pop %rbp 19: c3 retq |
行番号を表示
(-lオプション)
-dまたは-Dまたは-rオプションとともに-lオプションを用いると、デバッグ情報を利用して逆アセンブル情報にファイルの行番号を追加で表示できます。
コマンド例
1 |
objdump -d -l prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main>: main(): /home/ubuntu/test_objdump/prog.c:7 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp /home/ubuntu/test_objdump/prog.c:8 4: e8 00 00 00 00 callq 9 <main+0x9> /home/ubuntu/test_objdump/prog.c:9 9: e8 00 00 00 00 callq e <main+0xe> /home/ubuntu/test_objdump/prog.c:10 e: e8 00 00 00 00 callq 13 <main+0x13> /home/ubuntu/test_objdump/prog.c:11 13: b8 00 00 00 00 mov $0x0,%eax /home/ubuntu/test_objdump/prog.c:12 18: 5d pop %rbp 19: c3 retq |
逆アセンブル情報に完全なアドレス情報を表示
(--prefix-addressesオプション)
--prefix-addressesオプションは逆アセンブル情報を表示する場合、アドレス情報が完全なアドレス情報として表示できます。
コマンド例
1 |
objdump -d --prefix-addresses prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main> push %rbp 0000000000000001 <main+0x1> mov %rsp,%rbp 0000000000000004 <main+0x4> callq 0000000000000009 <main+0x9> 0000000000000009 <main+0x9> callq 000000000000000e <main+0xe> 000000000000000e <main+0xe> callq 0000000000000013 <main+0x13> 0000000000000013 <main+0x13> mov $0x0,%eax 0000000000000018 <main+0x18> pop %rbp 0000000000000019 <main+0x19> retq |
ファイルのオフセット情報を表示
(-Fオプション)
-Fオプションは逆アセンブル情報を表示する場合、ファイルのオフセット情報を表示できます。
コマンド例
1 |
objdump -d -F prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main> (File Offset: 0x40): 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: e8 00 00 00 00 callq 9 <main+0x9> (File Offset: 0x49) 9: e8 00 00 00 00 callq e <main+0xe> (File Offset: 0x4e) e: e8 00 00 00 00 callq 13 <main+0x13> (File Offset: 0x53) 13: b8 00 00 00 00 mov $0x0,%eax 18: 5d pop %rbp 19: c3 retq |
全てのセクションの逆アセンブル情報を表示
(-Dオプション)
-Dオプションを用いると、オブジェクトファイルのすべてのセクションの逆アセンブル情報を表示できます。
コマンド例
1 |
objdump -D prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: e8 00 00 00 00 callq 9 <main+0x9> 9: e8 00 00 00 00 callq e <main+0xe> e: e8 00 00 00 00 callq 13 <main+0x13> 13: b8 00 00 00 00 mov $0x0,%eax 18: 5d pop %rbp 19: c3 retq Disassembly of section .comment: 0000000000000000 <.comment>: 0: 00 47 43 add %al,0x43(%rdi) 3: 43 3a 20 rex.XB cmp (%r8),%spl 6: 28 55 62 sub %dl,0x62(%rbp) 9: 75 6e jne 79 <main+0x79> b: 74 75 je 82 <main+0x82> d: 20 35 2e 34 2e 30 and %dh,0x302e342e(%rip) # 302e3441 <main+0x302e3441> 13: 2d 36 75 62 75 sub $0x75627536,%eax 18: 6e outsb %ds:(%rsi),(%dx) 19: 74 75 je 90 <main+0x90> 1b: 31 7e 31 xor %edi,0x31(%rsi) 1e: 36 2e 30 34 2e ss xor %dh,%cs:(%rsi,%rbp,1) 23: 39 29 cmp %ebp,(%rcx) 25: 20 35 2e 34 2e 30 and %dh,0x302e342e(%rip) # 302e3459 <main+0x302e3459> 2b: 20 32 and %dh,(%rdx) 2d: 30 31 xor %dh,(%rcx) 2f: 36 30 36 xor %dh,%ss:(%rsi) 32: 30 39 xor %bh,(%rcx) ... Disassembly of section .eh_frame: 0000000000000000 <.eh_frame>: 0: 14 00 adc $0x0,%al 2: 00 00 add %al,(%rax) 4: 00 00 add %al,(%rax) 6: 00 00 add %al,(%rax) 8: 01 7a 52 add %edi,0x52(%rdx) b: 00 01 add %al,(%rcx) d: 78 10 js 1f <.eh_frame+0x1f> f: 01 1b add %ebx,(%rbx) 11: 0c 07 or $0x7,%al 13: 08 90 01 00 00 1c or %dl,0x1c000001(%rax) 19: 00 00 add %al,(%rax) 1b: 00 1c 00 add %bl,(%rax,%rax,1) 1e: 00 00 add %al,(%rax) 20: 00 00 add %al,(%rax) 22: 00 00 add %al,(%rax) 24: 1a 00 sbb (%rax),%al 26: 00 00 add %al,(%rax) 28: 00 41 0e add %al,0xe(%rcx) 2b: 10 86 02 43 0d 06 adc %al,0x60d4302(%rsi) 31: 55 push %rbp 32: 0c 07 or $0x7,%al 34: 08 00 or %al,(%rax) ... |
セクションを指定
(-jオプション)
-jオプションでセクション名を指定すると、表示する情報をそのセクションのみにできます。
また、セクション名は-hオプションを用いるとまとめられた情報を得ることができます。
コマンド例
1 |
objdump -d -j .comment prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
prog.o: file format elf64-x86-64 Disassembly of section .comment: 0000000000000000 <.comment>: 0: 00 47 43 add %al,0x43(%rdi) 3: 43 3a 20 rex.XB cmp (%r8),%spl 6: 28 55 62 sub %dl,0x62(%rbp) 9: 75 6e jne 79 <main+0x79> b: 74 75 je 82 <main+0x82> d: 20 35 2e 34 2e 30 and %dh,0x302e342e(%rip) # 302e3441 <main+0x302e3441> 13: 2d 36 75 62 75 sub $0x75627536,%eax 18: 6e outsb %ds:(%rsi),(%dx) 19: 74 75 je 90 <main+0x90> 1b: 31 7e 31 xor %edi,0x31(%rsi) 1e: 36 2e 30 34 2e ss xor %dh,%cs:(%rsi,%rbp,1) 23: 39 29 cmp %ebp,(%rcx) 25: 20 35 2e 34 2e 30 and %dh,0x302e342e(%rip) # 302e3459 <main+0x302e3459> 2b: 20 32 and %dh,(%rdx) 2d: 30 31 xor %dh,(%rcx) 2f: 36 30 36 xor %dh,%ss:(%rsi) 32: 30 39 xor %bh,(%rcx) ... |
セクションヘッダー情報を表示
(-hオプション)
-hオプションはセクションヘッダー情報を表示しできます。セクションのまとめを確認する場合に便利です。
コマンド例
1 |
objdump -h -w prog.o |
実行結果
1 2 3 4 5 6 7 8 |
Sections: Idx Name Size VMA LMA File off Algn Flags 0 .text 0000001a 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 0000000000000000 0000000000000000 0000005a 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 0000000000000000 0000000000000000 0000005a 2**0 ALLOC 3 .comment 00000035 0000000000000000 0000000000000000 0000005a 2**0 CONTENTS, READONLY 4 .note.GNU-stack 00000000 0000000000000000 0000000000000000 0000008f 2**0 CONTENTS, READONLY 5 .eh_frame 00000038 0000000000000000 0000000000000000 00000090 2**3 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA |
デバッグ情報を表示
(-gオプション)
-gオプションを用いるとデバッグ情報を表示できます。
コマンド例
1 |
objdump -g prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
prog.o: file format elf64-x86-64 Contents of the .eh_frame section: 00000000 0000000000000014 00000000 CIE Version: 1 Augmentation: "zR" Code alignment factor: 1 Data alignment factor: -8 Return address column: 16 Augmentation data: 1b DW_CFA_def_cfa: r7 (rsp) ofs 8 DW_CFA_offset: r16 (rip) at cfa-8 DW_CFA_nop DW_CFA_nop 00000018 000000000000001c 0000001c FDE cie=00000000 pc=0000000000000000..000000000000001a DW_CFA_advance_loc: 1 to 0000000000000001 DW_CFA_def_cfa_offset: 16 DW_CFA_offset: r6 (rbp) at cfa-16 DW_CFA_advance_loc: 3 to 0000000000000004 DW_CFA_def_cfa_register: r6 (rbp) DW_CFA_advance_loc: 21 to 0000000000000019 DW_CFA_def_cfa: r7 (rsp) ofs 8 DW_CFA_nop DW_CFA_nop DW_CFA_nop |
また、gccの-gオプション等を用いて、デバッグ情報があるオブジェクトファイルを作成した場合、そのデバッグ情報のセクションについての情報も表示されるため、より多くの情報が表示されます。
全てのセクションの内容を表示
(-sオプション)
-sオプションを用いると、全てのセクションのバイナリの内容を表示できます。
コマンド例
1 |
objdump -s prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
prog.o: file format elf64-x86-64 Contents of section .text: 0000 554889e5 e8000000 00e80000 0000e800 UH.............. 0010 000000b8 00000000 5dc3 ........]. Contents of section .comment: 0000 00474343 3a202855 62756e74 7520352e .GCC: (Ubuntu 5. 0010 342e302d 36756275 6e747531 7e31362e 4.0-6ubuntu1~16. 0020 30342e39 2920352e 342e3020 32303136 04.9) 5.4.0 2016 0030 30363039 00 0609. Contents of section .eh_frame: 0000 14000000 00000000 017a5200 01781001 .........zR..x.. 0010 1b0c0708 90010000 1c000000 1c000000 ................ 0020 00000000 1a000000 00410e10 8602430d .........A....C. 0030 06550c07 08000000 .U...... |
全てのヘッダー情報を表示
(-xオプション)
-xオプションを用いると全てのヘッダー情報(オブジェクトファイルのフォーマット情報、ファイルのヘッダー情報、シンボルテーブル情報、リロケーション情報)を表示できます。
また、-xオプションは-a, -f, -h, -p, -r, -tオプションをすべて利用したオプションになります。
コマンド例
1 |
objdump -x -w prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
prog.o: file format elf64-x86-64 prog.o architecture: i386:x86-64, flags 0x00000011: HAS_RELOC, HAS_SYMS start address 0x0000000000000000 Sections: Idx Name Size VMA LMA File off Algn Flags 0 .text 0000001a 0000000000000000 0000000000000000 00000040 2**0 CONTENTS, ALLOC, LOAD, RELOC, READONLY, CODE 1 .data 00000000 0000000000000000 0000000000000000 0000005a 2**0 CONTENTS, ALLOC, LOAD, DATA 2 .bss 00000000 0000000000000000 0000000000000000 0000005a 2**0 ALLOC 3 .comment 00000035 0000000000000000 0000000000000000 0000005a 2**0 CONTENTS, READONLY 4 .note.GNU-stack 00000000 0000000000000000 0000000000000000 0000008f 2**0 CONTENTS, READONLY 5 .eh_frame 00000038 0000000000000000 0000000000000000 00000090 2**3 CONTENTS, ALLOC, LOAD, RELOC, READONLY, DATA SYMBOL TABLE: 0000000000000000 l df *ABS* 0000000000000000 prog.c 0000000000000000 l d .text 0000000000000000 .text 0000000000000000 l d .data 0000000000000000 .data 0000000000000000 l d .bss 0000000000000000 .bss 0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack 0000000000000000 l d .eh_frame 0000000000000000 .eh_frame 0000000000000000 l d .comment 0000000000000000 .comment 0000000000000000 g F .text 000000000000001a main 0000000000000000 *UND* 0000000000000000 func1 0000000000000000 *UND* 0000000000000000 func2 0000000000000000 *UND* 0000000000000000 func3 RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 0000000000000005 R_X86_64_PC32 func1-0x0000000000000004 000000000000000a R_X86_64_PC32 func2-0x0000000000000004 000000000000000f R_X86_64_PC32 func3-0x0000000000000004 RELOCATION RECORDS FOR [.eh_frame]: OFFSET TYPE VALUE 0000000000000020 R_X86_64_PC32 .text |
オブジェクトファイルのフォーマットを表示
(-pオプション)
-pオプションを用いるとオブジェクトファイルのフォーマットについての情報を表示できます。表示される内容はオブジェクトファイルの種類によって異なります。
コマンド例
1 |
objdump -p prog.o archive.a |
実行結果
1 2 3 4 5 6 7 8 9 10 11 |
prog.o: file format elf64-x86-64 In archive archive.a: file1.o: file format elf64-x86-64 file2.o: file format elf64-x86-64 file3.o: file format elf64-x86-64 |
実行ファイルを指定した場合は、以下のようになります。
コマンド例
1 |
objdump -p a.out |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
a.out: file format elf64-x86-64 Program Header: PHDR off 0x0000000000000040 vaddr 0x0000000000400040 paddr 0x0000000000400040 align 2**3 filesz 0x00000000000001f8 memsz 0x00000000000001f8 flags r-x INTERP off 0x0000000000000238 vaddr 0x0000000000400238 paddr 0x0000000000400238 align 2**0 filesz 0x000000000000001c memsz 0x000000000000001c flags r-- LOAD off 0x0000000000000000 vaddr 0x0000000000400000 paddr 0x0000000000400000 align 2**21 filesz 0x00000000000008dc memsz 0x00000000000008dc flags r-x LOAD off 0x0000000000000e00 vaddr 0x0000000000600e00 paddr 0x0000000000600e00 align 2**21 filesz 0x0000000000000248 memsz 0x0000000000000250 flags rw- DYNAMIC off 0x0000000000000e18 vaddr 0x0000000000600e18 paddr 0x0000000000600e18 align 2**3 filesz 0x00000000000001e0 memsz 0x00000000000001e0 flags rw- NOTE off 0x0000000000000254 vaddr 0x0000000000400254 paddr 0x0000000000400254 align 2**2 filesz 0x0000000000000044 memsz 0x0000000000000044 flags r-- EH_FRAME off 0x00000000000007b4 vaddr 0x00000000004007b4 paddr 0x00000000004007b4 align 2**2 filesz 0x0000000000000034 memsz 0x0000000000000034 flags r-- STACK off 0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**4 filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw- RELRO off 0x0000000000000e00 vaddr 0x0000000000600e00 paddr 0x0000000000600e00 align 2**0 filesz 0x0000000000000200 memsz 0x0000000000000200 flags r-- Dynamic Section: NEEDED func.so NEEDED libc.so.6 INIT 0x0000000000400598 FINI 0x00000000004007a4 INIT_ARRAY 0x0000000000600e00 INIT_ARRAYSZ 0x0000000000000008 FINI_ARRAY 0x0000000000600e08 FINI_ARRAYSZ 0x0000000000000008 GNU_HASH 0x0000000000400298 STRTAB 0x0000000000400420 SYMTAB 0x00000000004002d0 STRSZ 0x00000000000000c0 SYMENT 0x0000000000000018 DEBUG 0x0000000000000000 PLTGOT 0x0000000000601000 PLTRELSZ 0x0000000000000060 PLTREL 0x0000000000000007 JMPREL 0x0000000000400538 RELA 0x0000000000400520 RELASZ 0x0000000000000018 RELAENT 0x0000000000000018 VERNEED 0x0000000000400500 VERNEEDNUM 0x0000000000000001 VERSYM 0x00000000004004e0 Version References: required from libc.so.6: 0x09691a75 0x00 02 GLIBC_2.2.5 |
ファイルのヘッダー情報を表示
(-fオプション)
-fオプションを用いるとファイルのヘッダー情報を表示できます。
コマンド例
1 |
objdump -f prog.o |
実行結果
1 2 3 4 |
prog.o: file format elf64-x86-64 architecture: i386:x86-64, flags 0x00000011: HAS_RELOC, HAS_SYMS start address 0x0000000000000000 |
シンボルテーブルを表示
(-tオプション)
-tオプションを用いるとオブジェクトファイルのシンボルテーブルを表示できます。1列目はシンボル値を表しています。2列目の部分は、スペースが多いかもしれないかもしれませんが、7文字の文字列が入り、シンボルの特徴を表しています。3列目はセクションを表します。4列目はアライメントやサイズを表します。最後の列はシンボル名を表します。
シンボルの特徴
n文字目 | 記号と意味 |
1 | l:ローカル g:グローバル u:ユニークグローバル !:ローカルとグローバルの両方 なし:ローカルでもグローバルでもない |
2 | w:weak symbol なし:strong symbol (参考:Weak symbol - Wikipedia) |
3 | C:コンストラクタ |
4 | W:warning symbol |
5 | I:別のシンボルの間接参照 i:リロケーション処理中に評価される関数 |
6 | d:デバッグシンボル D:ダイナミックシンボル |
7 | F:関数 f:ファイル O:オブジェクト |
コマンド例
1 |
objdump -t prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
prog.o: file format elf64-x86-64 SYMBOL TABLE: 0000000000000000 l df *ABS* 0000000000000000 prog.c 0000000000000000 l d .text 0000000000000000 .text 0000000000000000 l d .data 0000000000000000 .data 0000000000000000 l d .bss 0000000000000000 .bss 0000000000000000 l d .note.GNU-stack 0000000000000000 .note.GNU-stack 0000000000000000 l d .eh_frame 0000000000000000 .eh_frame 0000000000000000 l d .comment 0000000000000000 .comment 0000000000000000 g F .text 000000000000001a main 0000000000000000 *UND* 0000000000000000 func1 0000000000000000 *UND* 0000000000000000 func2 0000000000000000 *UND* 0000000000000000 func3 |
リロケーション情報を表示
(-rオプション)
-rオプションを用いるとリロケーション情報が表示されます。
コマンド例
1 |
objdump -r prog.o |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 |
prog.o: file format elf64-x86-64 RELOCATION RECORDS FOR [.text]: OFFSET TYPE VALUE 0000000000000005 R_X86_64_PC32 func1-0x0000000000000004 000000000000000a R_X86_64_PC32 func2-0x0000000000000004 000000000000000f R_X86_64_PC32 func3-0x0000000000000004 RELOCATION RECORDS FOR [.eh_frame]: OFFSET TYPE VALUE 0000000000000020 R_X86_64_PC32 .text |
また、-dオプションや-Dオプションと一緒に用いると逆アセンブル情報に追加でリロケーション情報が表示されます。
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
$ objdump -d -r prog.o prog.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 <main>: 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: e8 00 00 00 00 callq 9 <main+0x9> 5: R_X86_64_PC32 func1-0x4 9: e8 00 00 00 00 callq e <main+0xe> a: R_X86_64_PC32 func2-0x4 e: e8 00 00 00 00 callq 13 <main+0x13> f: R_X86_64_PC32 func3-0x4 13: b8 00 00 00 00 mov $0x0,%eax 18: 5d pop %rbp 19: c3 retq |
動的シンボルテーブルを表示
(-Tオプション)
-Tオプションを用いると動的シンボルテーブルを表示できます。この情報は共有ライブラリのような動的オブジェクトを使用するオブジェクトファイルに対して利用できます。
コマンド例
1 |
objdump -T func.so |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
func.so: file format elf64-x86-64 DYNAMIC SYMBOL TABLE: 0000000000000590 l d .init 0000000000000000 .init 0000000000000000 w D *UND* 0000000000000000 _ITM_deregisterTMCloneTable 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 puts 0000000000000000 w D *UND* 0000000000000000 __gmon_start__ 0000000000000000 w D *UND* 0000000000000000 _Jv_RegisterClasses 0000000000000000 w D *UND* 0000000000000000 _ITM_registerTMCloneTable 0000000000000000 w DF *UND* 0000000000000000 GLIBC_2.2.5 __cxa_finalize 00000000000006e0 g DF .text 0000000000000013 Base func1 0000000000201028 g D .data 0000000000000000 Base _edata 0000000000201030 g D .bss 0000000000000000 Base _end 00000000000006f3 g DF .text 0000000000000013 Base func2 0000000000201028 g D .bss 0000000000000000 Base __bss_start 0000000000000590 g DF .init 0000000000000000 Base _init 0000000000000706 g DF .text 0000000000000013 Base func3 000000000000071c g DF .fini 0000000000000000 Base _fini |
コマンド例
1 |
objdump -T a.out |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
a.out: file format elf64-x86-64 DYNAMIC SYMBOL TABLE: 0000000000000000 DF *UND* 0000000000000000 func3 0000000000000000 DF *UND* 0000000000000000 func1 0000000000000000 w D *UND* 0000000000000000 _ITM_deregisterTMCloneTable 0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 __libc_start_main 0000000000000000 w D *UND* 0000000000000000 __gmon_start__ 0000000000000000 DF *UND* 0000000000000000 func2 0000000000000000 w D *UND* 0000000000000000 _Jv_RegisterClasses 0000000000000000 w D *UND* 0000000000000000 _ITM_registerTMCloneTable 0000000000601048 g D .data 0000000000000000 Base _edata 0000000000601050 g D .bss 0000000000000000 Base _end 0000000000601048 g D .bss 0000000000000000 Base __bss_start 0000000000400598 g DF .init 0000000000000000 Base _init 00000000004007a4 g DF .fini 0000000000000000 Base _fini |
動的リロケーション情報を表示
(-Rオプション)
-Rオプションを用いると動的リロケーション情報を表示できます。この情報は共有ライブラリのような動的オブジェクトを使用するオブジェクトファイルに対して利用できます。
コマンド例
1 |
objdump -R func.so |
実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 |
func.so: file format elf64-x86-64 DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 0000000000200e00 R_X86_64_RELATIVE *ABS*+0x00000000000006b0 0000000000200e08 R_X86_64_RELATIVE *ABS*+0x0000000000000670 0000000000201020 R_X86_64_RELATIVE *ABS*+0x0000000000201020 0000000000200fd8 R_X86_64_GLOB_DAT _ITM_deregisterTMCloneTable 0000000000200fe0 R_X86_64_GLOB_DAT __gmon_start__ 0000000000200fe8 R_X86_64_GLOB_DAT _Jv_RegisterClasses 0000000000200ff0 R_X86_64_GLOB_DAT _ITM_registerTMCloneTable 0000000000200ff8 R_X86_64_GLOB_DAT __cxa_finalize@GLIBC_2.2.5 0000000000201018 R_X86_64_JUMP_SLOT puts@GLIBC_2.2.5 |
コマンド例
1 |
objdump -R a.out |
実行結果
1 2 3 4 5 6 7 8 9 |
a.out: file format elf64-x86-64 DYNAMIC RELOCATION RECORDS OFFSET TYPE VALUE 0000000000600ff8 R_X86_64_GLOB_DAT __gmon_start__ 0000000000601018 R_X86_64_JUMP_SLOT func3 0000000000601020 R_X86_64_JUMP_SLOT func1 0000000000601028 R_X86_64_JUMP_SLOT __libc_start_main@GLIBC_2.2.5 0000000000601030 R_X86_64_JUMP_SLOT func2 |
プログラムが必要とする共有ライブラリの表示
objdumpコマンドの-pオプションを用いるとオブジェクトファイルのフォーマットについての情報を表示できます。共有ライブラリを必要とする実行プラグラムに対して、'objdump -p'を行うとNEEDEDの情報でプログラムの実行に必要な共有ライブラリの情報が表示されます。さらにgrepコマンドでNEEDEDをキーワードにすることで、その共有ライブラリの情報をリスト化できます。
また、下のコマンド例と実行結果ではwhichコマンドでプログラムのパスを取得しています。
コマンド例
1 |
objdump -p program | grep NEEDED |
コマンド例と実行結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$ objdump -p $(which gnuplot) | grep NEEDED NEEDED libreadline.so.6 NEEDED libgd.so.3 NEEDED liblua5.1.so.0 NEEDED libwx_gtk3u_core-3.0.so.0 NEEDED libwx_baseu-3.0.so.0 NEEDED libpangocairo-1.0.so.0 NEEDED libpango-1.0.so.0 NEEDED libgobject-2.0.so.0 NEEDED libglib-2.0.so.0 NEEDED libcairo.so.2 NEEDED libgtk-3.so.0 NEEDED libgdk-3.so.0 NEEDED libQt5Network.so.5 NEEDED libQt5Gui.so.5 NEEDED libQt5Core.so.5 NEEDED libdl.so.2 NEEDED libcerf.so.1 NEEDED libstdc++.so.6 NEEDED libm.so.6 NEEDED libgcc_s.so.1 NEEDED libpthread.so.0 NEEDED libc.so.6 |