「objdump」の版間の差分

提供: セキュリティ
移動: 案内検索
(関連項目)
(関連項目)
行283: 行283:
 
* [[コンパイラ]]
 
* [[コンパイラ]]
 
* [[gcc]]
 
* [[gcc]]
=== バイナリ ===
 
{{binary}}
 
=== アセンブラ ===
 
 
{{assembler}}
 
{{assembler}}
=== デバッガ ===
 
{{debugger}}
 

2014年12月24日 (水) 14:40時点における版

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>

関連項目