「objdump」の版間の差分
提供: セキュリティ
(相違点なし)
|
2013年8月23日 (金) 23:23時点における版
objdump とは、オブジェクトファイルの情報を表示するコマンドです。逆アセンブラとしても利用できます。
読み方
- objdump
- おぶじぇだんぷ
目次
概要
objdump とは、オブジェクトファイルの情報を表示するコマンドです。逆アセンブラとしても利用できます。
インストール
- FreeBSD には、デフォルトでインストールされています。
使い方
逆アセンブルする
-d は、オブジェファイルから 機械語 のアセンブラのニーモニック を表示します。このオプションでは、命令を含んでいると考えられるセクションだけを逆アセンブルします。 すべてのセクションを逆アセンブルするには、 -D ( --disassemble-all ) オプションを使用します。
% objdump -d /bin/echo | head -50 23:17[vm2 ~/p/hacking/defcon/defcon18/binary] /bin/echo: ファイル形式 elf32-i386-freebsd セクション .init の逆アセンブル: 080483c0 <.init>: 80483c0: 83 ec 0c sub $0xc,%esp 80483c3: e8 b8 01 00 00 call 8048580 <writev@plt+0x11c> 80483c8: e8 73 04 00 00 call 8048840 <writev@plt+0x3dc> 80483cd: 83 c4 0c add $0xc,%esp 80483d0: c3 ret セクション .plt の逆アセンブル: 080483d4 <malloc@plt-0x10>: 80483d4: ff 35 ac 99 04 08 pushl 0x80499ac 80483da: ff 25 b0 99 04 08 jmp *0x80499b0 80483e0: 00 00 add %al,(%eax) ... 080483e4 <malloc@plt>: 80483e4: ff 25 b4 99 04 08 jmp *0x80499b4 80483ea: 68 00 00 00 00 push $0x0 80483ef: e9 e0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 080483f4 <atexit@plt>: 80483f4: ff 25 b8 99 04 08 jmp *0x80499b8 80483fa: 68 08 00 00 00 push $0x8 80483ff: e9 d0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048404 <strerror@plt>: 8048404: ff 25 bc 99 04 08 jmp *0x80499bc 804840a: 68 10 00 00 00 push $0x10 804840f: e9 c0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048414 <_init_tls@plt>: 8048414: ff 25 c0 99 04 08 jmp *0x80499c0 804841a: 68 18 00 00 00 push $0x18 804841f: e9 b0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048424 <strlen@plt>: 8048424: ff 25 c4 99 04 08 jmp *0x80499c4 804842a: 68 20 00 00 00 push $0x20 804842f: e9 a0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048434 <__error@plt>: 8048434: ff 25 c8 99 04 08 jmp *0x80499c8 804843a: 68 28 00 00 00 push $0x28 804843f: e9 90 ff ff ff jmp 80483d4 <malloc@plt-0x10>
16bit のオブジェクトファイルを逆アセンブルする
objdump -m i8086 -b binary -D foo.bin
32bit のオブジェクトファイルを逆アセンブルする
objdump -m i386 -b binary -D foo.bin
64bit のオブジェクトファイルを逆アセンブルする
objdump -m x86-64 -b binary -D foo.bin
ヘッダ情報を確認する
% objdump -h /bin/echo /bin/echo: ファイル形式 elf32-i386-freebsd セクション: 索引名 サイズ VMA LMA File off Algn 0 .interp 00000015 08048134 08048134 00000134 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 1 .note.ABI-tag 00000018 0804814c 0804814c 0000014c 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 2 .hash 0000004c 08048164 08048164 00000164 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .gnu.hash 0000002c 080481b0 080481b0 000001b0 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 4 .dynsym 000000e0 080481dc 080481dc 000001dc 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 .dynstr 0000007d 080482bc 080482bc 000002bc 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 6 .gnu.version 0000001c 0804833a 0804833a 0000033a 2**1 CONTENTS, ALLOC, LOAD, READONLY, DATA 7 .gnu.version_r 00000020 08048358 08048358 00000358 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 8 .rel.plt 00000048 08048378 08048378 00000378 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 9 .init 00000011 080483c0 080483c0 000003c0 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 10 .plt 000000a0 080483d4 080483d4 000003d4 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 11 .text 000003ec 08048480 08048480 00000480 2**4 CONTENTS, ALLOC, LOAD, READONLY, CODE 12 .fini 0000000c 0804886c 0804886c 0000086c 2**2 CONTENTS, ALLOC, LOAD, READONLY, CODE 13 .rodata 00000015 08048878 08048878 00000878 2**0 CONTENTS, ALLOC, LOAD, READONLY, DATA 14 .eh_frame_hdr 00000014 08048890 08048890 00000890 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 15 .eh_frame 00000038 080488a4 080488a4 000008a4 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 16 .ctors 00000008 080498dc 080498dc 000008dc 2**2 CONTENTS, ALLOC, LOAD, DATA 17 .dtors 00000008 080498e4 080498e4 000008e4 2**2 CONTENTS, ALLOC, LOAD, DATA 18 .jcr 00000004 080498ec 080498ec 000008ec 2**2 CONTENTS, ALLOC, LOAD, DATA 19 .dynamic 000000b8 080498f0 080498f0 000008f0 2**2 CONTENTS, ALLOC, LOAD, DATA 20 .got.plt 00000030 080499a8 080499a8 000009a8 2**2 CONTENTS, ALLOC, LOAD, DATA 21 .data 0000000c 080499d8 080499d8 000009d8 2**2 CONTENTS, ALLOC, LOAD, DATA 22 .bss 00000008 080499e4 080499e4 000009e4 2**2 ALLOC 23 .comment 00000288 00000000 00000000 000009e4 2**0 CONTENTS, READONLY
すべてのコンテキストを表示する
% objdump -s /bin/echo |less 23:13[vm2 ~/p/hacking/defcon/defcon18/binary] /bin/echo: ファイル形式 elf32-i386-freebsd セクション .interp の内容: 8048134 2f6c6962 65786563 2f6c642d 656c662e /libexec/ld-elf. 8048144 736f2e31 00 so.1. セクション .note.ABI-tag の内容: 804814c 08000000 04000000 01000000 46726565 ............Free 804815c 42534400 81c10d00 BSD..... セクション .hash の内容: 8048164 03000000 0e000000 09000000 0a000000 ................ 8048174 0b000000 00000000 00000000 00000000 ................ 8048184 00000000 03000000 04000000 05000000 ................ 8048194 02000000 0c000000 07000000 08000000 ................ 80481a4 0d000000 06000000 01000000 ............ セクション .gnu.hash の内容: 80481b0 03000000 0b000000 01000000 05000000 ................ 80481c0 60200038 0b000000 0d000000 00000000 ` .8............ 80481d0 a6dda36b bbe3927c bd50769e ...k...|.Pv. セクション .dynsym の内容: 80481dc 00000000 00000000 00000000 00000000 ................ 80481ec 5a000000 00000000 30010000 12000000 Z.......0....... 80481fc 01000000 00000000 00000000 20000000 ............ ... 804820c 68000000 00000000 2b000000 12000000 h.......+....... 804821c 32000000 00000000 4f000000 12000000 2.......O....... 804822c 48000000 00000000 05000000 12000000 H............... 804823c 41000000 00000000 8b000000 12000000 A............... 804824c 52000000 00000000 16000000 12000000 R............... 804825c 6a000000 00000000 43000000 12000000 j.......C....... 804826c 3b000000 00000000 00000000 12000000 ;............... 804827c 61000000 00000000 00000000 12000000 a............... 804828c 2a000000 e8990408 04000000 11001700 *............... 804829c 6f000000 ec990408 00000000 1000f1ff o............... 80482ac 1f000000 d8990408 04000000 11001600 ................ セクション .dynstr の内容: 80482bc 005f4a76 5f526567 69737465 72436c61 ._Jv_RegisterCla 80482cc 73736573 006c6962 632e736f 2e37005f sses.libc.so.7._ 80482dc 5f70726f 676e616d 6500656e 7669726f _progname.enviro 80482ec 6e007374 72657272 6f720077 72697465 n.strerror.write 80482fc 00737472 6c656e00 5f696e69 745f746c .strlen._init_tl 804830c 73005f5f 6572726f 72006d61 6c6c6f63 s.__error.malloc 804831c 00777269 74657600 61746578 6974005f .writev.atexit._ 804832c 656e6400 46425344 5f312e30 00 end.FBSD_1.0. セクション .gnu.version の内容: 804833a 00000200 00000200 02000200 02000200 ................ 804834a 02000200 02000100 01000100 ............ セクション .gnu.version_r の内容: 8048358 01000100 15000000 10000000 00000000 ................ 8048368 b0287a07 00000200 74000000 00000000 .(z.....t....... セクション .rel.plt の内容: 8048378 b4990408 07010000 b8990408 07030000 ................ 8048388 bc990408 07040000 c0990408 07050000 ................ 8048398 c4990408 07060000 c8990408 07070000 ................ 80483a8 cc990408 07080000 d0990408 07090000 ................ 80483b8 d4990408 070a0000 ........ セクション .init の内容: 80483c0 83ec0ce8 b8010000 e8730400 0083c40c .........s...... 80483d0 c3 . セクション .plt の内容: 80483d4 ff35ac99 0408ff25 b0990408 00000000 .5.....%........ 80483e4 ff25b499 04086800 000000e9 e0ffffff .%....h......... 80483f4 ff25b899 04086808 000000e9 d0ffffff .%....h......... 8048404 ff25bc99 04086810 000000e9 c0ffffff .%....h......... 8048414 ff25c099 04086818 000000e9 b0ffffff .%....h......... 8048424 ff25c499 04086820 000000e9 a0ffffff .%....h ........ 8048434 ff25c899 04086828 000000e9 90ffffff .%....h(........ 8048444 ff25cc99 04086830 000000e9 80ffffff .%....h0........
インテル表記で逆アセンブルする
% objdump -M intel -S /bin/echo | head -50 23:16[vm2 ~/p/hacking/defcon/defcon18/binary] /bin/echo: ファイル形式 elf32-i386-freebsd セクション .init の逆アセンブル: 080483c0 <.init>: 80483c0: 83 ec 0c sub esp,0xc 80483c3: e8 b8 01 00 00 call 8048580 <writev@plt+0x11c> 80483c8: e8 73 04 00 00 call 8048840 <writev@plt+0x3dc> 80483cd: 83 c4 0c add esp,0xc 80483d0: c3 ret セクション .plt の逆アセンブル: 080483d4 <malloc@plt-0x10>: 80483d4: ff 35 ac 99 04 08 push DWORD PTR ds:0x80499ac 80483da: ff 25 b0 99 04 08 jmp DWORD PTR ds:0x80499b0 80483e0: 00 00 add BYTE PTR [eax],al ... 080483e4 <malloc@plt>: 80483e4: ff 25 b4 99 04 08 jmp DWORD PTR ds:0x80499b4 80483ea: 68 00 00 00 00 push 0x0 80483ef: e9 e0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 080483f4 <atexit@plt>: 80483f4: ff 25 b8 99 04 08 jmp DWORD PTR ds:0x80499b8 80483fa: 68 08 00 00 00 push 0x8 80483ff: e9 d0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048404 <strerror@plt>: 8048404: ff 25 bc 99 04 08 jmp DWORD PTR ds:0x80499bc 804840a: 68 10 00 00 00 push 0x10 804840f: e9 c0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048414 <_init_tls@plt>: 8048414: ff 25 c0 99 04 08 jmp DWORD PTR ds:0x80499c0 804841a: 68 18 00 00 00 push 0x18 804841f: e9 b0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048424 <strlen@plt>: 8048424: ff 25 c4 99 04 08 jmp DWORD PTR ds:0x80499c4 804842a: 68 20 00 00 00 push 0x20 804842f: e9 a0 ff ff ff jmp 80483d4 <malloc@plt-0x10> 08048434 <__error@plt>: 8048434: ff 25 c8 99 04 08 jmp DWORD PTR ds:0x80499c8 804843a: 68 28 00 00 00 push 0x28 804843f: e9 90 ff ff ff jmp 80483d4 <malloc@plt-0x10>