OBJDUMP(1)

名称
objdump - オブジェクトファイルから情報を表示する

書式
objdump [-a|--archive-headers]
        [-b bfdname|--target=bfdname]
        [-C|--demangle[=style] ]
        [-d|--disassemble]
        [-D|--disassemble-all]
        [-z|--disassemble-zeroes]
        [-EB|-EL|--endian={big | little }]
        [-f|--file-headers]
        [--file-start-context]
        [-g|--debugging]
        [-e|--debugging-tags]
        [-h|--section-headers|--headers]
        [-i|--info]
        [-j section|--section=section]
        [-l|--line-numbers]
        [-S|--source]
        [-m machine|--architecture=machine]
        [-M options|--disassembler-options=options]
        [-p|--private-headers]
        [-r|--reloc]
        [-R|--dynamic-reloc]
        [-s|--full-contents]
        [-G|--stabs]
        [-t|--syms]
        [-T|--dynamic-syms]
        [-x|--all-headers]
        [-w|--wide]
        [--start-address=address]
        [--stop-address=address]
        [--prefix-addresses]
        [--[no-]show-raw-insn]
        [--adjust-vma=offset]
        [-V|--version]
        [-H|--help]
        objfile...

解説
objdump は一つ以上のオブジェクトファイルについて情報を表示します。 オプションで特にどの情報を表示するのかを制御します。 この情報は、単にプログラムをコンパイルして動かす事を目的とする プログラマの対極にある、コンパイルツールの仕事をしているプログラマに とって主に有用です。

objfile... で調べるオブジェクトファイルを指定します。 アーカイブを指定した場合は、 objdump はメンバのオブジェクトファイルそれぞれの情報を表示します。

オプション
ここではオプションの長い形式と短い形式を一緒に記してあり、 それらは等価です。 少なくとも -a,-d,-D,-e,-f,-g,-G,-h,-H,-p,-r,-R,-s,-S,-t,-T,-V,-x のうちのいずれかのオプション 1 つは与える必要があります。

-a
--archive-header
    objfile で指定された中にアーカイブがあれば、アーカイブの ヘッダ情報を ( ls -l に似た形式で) 表示します。 ar tv でリストされる情報に加えて、 アーカイブの各メンバのオブジェクトファイル形式を、 objdump -a は表示します。

--adjust-vma=offset
    情報をダンプする際に、まず offset をすべてのセクションのアドレスに加算します。 これはセクションのアドレスがシンボルテーブルと対応しない場合に 有効です。 そのような状況は、セクションのアドレスを表現できない a.out のような形式を使って、セクションを特定のアドレスに 置く場合に起こりえます。

-b bfdname
--target=bfdname
    オブジェクトファイルのオブジェクトコード形式を bfdname で指定します。 これはおそらく不要です。 なぜなら objdump は多くの形式を自動で認識できるからです。

    例えば

            objdump -b oasys -m vax -h fu.o

    では、Oasys のコンパイラで生成された形式の、VAX のオブジェクトファイルで あることが明示的に指定された ( -m )、ファイル fu.o のセクションヘッダ ( -h ) からのサマリ情報を表示します。 指定可能な形式名は -i オプションでリストできます。

-C
--demangle[=style]
    シンボル名の内部表現をユーザレベルの表現に デマングル (demangle) します。 加えてシステムが付加した先頭のアンダスコアも取り除くので、 これによって C++ の関数名がわかりやすくなります。 コンパイラごとに、マングル方法が異なります。 オプションのデマングルスタイル引数を使用することで、 コンパイラにあったデマングルスタイルを選択可能です。

-g
--debugging
    デバッグ情報を表示します。 ファイルに格納されているデバッグ情報を 解析して C 言語風の表記で出力する事を試みます。 いくつかの種類のデバッグ情報に関してのみ実装されています。 readelf -w により、他のタイプもいくつかサポートされています。

-e
--debugging-tags
    -g と同様ですが、情報が ctags tool 互換の形式で 生成されます。

-d
--disassemble
    objfile から、機械語に対応するアセンブラニーモニックを表示します。 このオプションでは機械語を含むはずのセクションだけを 逆アセンブルします。

-D
--disassemble-all
    -d と同様ですが、すべてのセクションの内容を 逆アセンブルします。 機械語を含むはずのセクションには限りません。

--prefix-addresses
    逆アセンブル時に、各行に完全な形のアドレスを表示します。 これは古い逆アセンブル出力形式です。

-EB
-EL
--endian={big|little}
    オブジェクトファイルのエンディアンを指定します。 これは逆アセンブルにのみ影響します。 エンディアン情報を持たない、 S レコードのようなファイル形式を逆アセンブルする際に有用です。

-f
--file-headers
    objfile の各ファイルのヘッダ全体からのサマリ情報を表示します。

--file-start-context
    まだ表示していないファイルから ソースコードと逆アセンブリの交互リストを表示するとき (-S を仮定)、 コンテキストをファイルの先頭まで拡張します。

-h
--section-headers
--headers
    オブジェクトファイルのセクションヘッダからサマリ情報を表示します。

    ファイルセグメントは非標準アドレスへ再配置されるかもしれません。 これは例えば -Ttext, -Tdata, -Tbss を ld に使用することで可能となります。 しかしながら、a.out のようなオブジェクトファイル形式では、 ファイルセグメントの開始アドレスを格納しません。 このような場合、 ld はセクションを正しく再配置しますが、 objdump -h を使用してファイルセクションヘッダを列挙しても 正しいアドレスを表示できません。 代りに、ターゲットにとって暗黙的な、通常のアドレスを表示してしまいます。

-H
--help
    objdump のオプションのサマリを表示して終了します。

-i
--info
    -b または -m で指定できるアーキテクチャとオブジェクト形式の名称をリストします。

-j name
--section=name
    name で指定したセクションの情報のみを表示します。

-l
--line-numbers
    表示に (デバッグ情報を使って) オブジェクトコードまたは再配置情報と対応する ファイル名とソースの行番号を含めます。 -d, -D, -r を指定した時にのみ有用です。

-m machine
--architecture=machine
    オブジェクトファイルを逆アセンブルする際のアーキテクチャを指定します。 S レコードのような、アーキテクチャ情報を持たないオブジェクトファイルを 逆アセンブルする場合に有効です。 -i オプションで、指定できるアーキテクチャ名をリストできます。

-M options
--disassembler-options=options
    逆アセンブラにターゲット固有情報を渡します。 いくつかのターゲットでのみサポートされています。 2 個以上のディスアセンブラオプションを指定する必要がある場合、 複数の -M オプションを指定することができますし、 コンマで区切ったリストとしてまとめて置くこともできます。

    ターゲットが ARM アーキテクチャの場合、 このスイッチを使用して、逆アセンブラが使用するレジスタ名セットを選択可能です。 -M reg-name-std (デフォルト) を指定すると、 ARM 命令セット文書で使われるレジスタ名を選択しますが、 レジスタ 13 は 'sp'、 レジスタ 14 は 'lr'、 レジスタ 15 は 'pc' と呼ばれます。 -M reg-names-apcs を指定すると、 ARM Procedure Call Standard で使用される名前セットを選択します。 -M reg-names-raw を指定すると、 r の後にレジスタ番号が続く名前を使用します。

    APCS のレジスタ名規則には 2 つの変種があり、 -M reg-names-atpcs および -M reg-names-special-atpcs で 有効化できます。 これらは ARM/Thumb Procedure Call Standard の命名規則を使用します (それぞれ、通常レジスタ名と特殊レジスタ名です)。

    ARM アーキテクチャにおいては、このオプションを使用することで、 全命令を Thumb 命令として解釈するよう、逆アセンブラに強制できます。 このためには、 --disassembler-options=force-thumb スイッチを使用します。 他のコンパイラで生成された Thumb コードを逆アセンブルするときに有用です。

    x86 では、オプションの一部は -m と重複した機能を持ちますが、 細粒度の制御を提供します。 次の選択肢の複数を、コンマで区切った文字列として指定可能です。 x86-64, i386, i8086 は、 指定したアーキテクチャの逆アセンブリを選択します。 intel および att は、 intel 文法モードと AT&T 文法モードを選択します。 addr32, addr16, data32, data16 は、 デフォルトのアドレスサイズとオペランドサイズを指定します。 これらの 4 オプションより、 オプション文字列中で後方に登場する x86-64, i386, i8086 が優先します。 最後に、AT&T モードでは、 suffix は、サフィックスがオペランドから推察できる場合であっても、 逆アセンブラがニーモニックサフィックスを表示するよう指示します。

    PPC では、booke, booke32, booke64 は BookE 命令の逆アセンブリを選択します。 32 および 64 は PowerPC および PowerPC64 の逆アセンブリ をそれぞれ選択します。

    MIPS では、このオプションは逆アセンブルされた命令における レジスタ名の表示を制御します。 以下の項目から複数個を選択して コンマで区切って並べることで指定できます。 不当なオプションは無視されます。

    "gpr-names=ABI"
        GPR (汎用レジスタ) の名前を、 指定した ABI に適した形で表示します。 デフォルトでは、GPR の名前は、 逆アセンブルしたバイナリの ABI に従って選択されます。

    "fpr-names=ABI"
        FPR (浮動小数点数レジスタ) の名前を、 指定した ABI に適した形で表示します。 デフォルトでは、FPR の名前でなく FPR 数が表示されます。

    "cp0-names=ARCH"
        CP0 (システムコントロールコプロセッサ/コプロセッサ 0) レジスタの名前を、ARCH で指定した CPU または アーキテクチャに適した形で表示します。 デフォルトでは、逆アセンブルしたバイナリのアーキテクチャと CPU に従って CP0 レジスタの名前が選択されます。

    "hwr-names=ARCH"
        HWR (ハードウエアレジスタ、"rdhwr" 命令が 使用する) の名前を、ARCH で指定した CPU または アーキテクチャに適した形で表示します。 デフォルトでは、逆アセンブルしたバイナリのアーキテクチャと CPU に従って HWR の名前が選択されます。

    "reg-names=ABI"
        GPR と FPR の名前を、 指定した ABI に適した形で表示します。

    "reg-names=ARCH"
        CPU固有のレジスタの名前 (CP0 レジスタと HWR の名前) を、選択した CPU またはアーキテクチャに適した形で表示します。

    上記に示したオプションのいずれにおいても、ABI または ARCH を numeric として指定して、 指定したレジスタのタイプに対する名前でなく番号を表示させるように することができます。 利用可能な ABI と ARCH の値の一覧は、 --help オプションを用いることで得られます。

-p
--private-headers
    オブジェクトファイルフォーマットに固有な情報を表示します。 実際の情報は、オブジェクトファイルフォーマットに依存します。 オブジェクトファイルフォーマットによっては、追加情報が表示されません。

-r
--reloc
    ファイルの再配置情報を表示します。 -d または -D と一緒に指定された場合は、再配置情報は逆アセンブル出力に 散りばめられて表示されます。

-R
--dynamic-reloc
    ファイルの実行時再配置情報を表示します。 このオプションは、 ある種の共有ライブラリなどのダイナミックオブジェクトに ついてのみ意味があります。

-s
--full-contents
    指定されたセクションのすべての内容を表示します。 デフォルトでは、空でないセクションすべてが表示されます。

-S
--source
    可能であればソースコードを逆アセンブルに混ぜて表示します。 -d を暗黙的に指定します。

--show-raw-insn
    命令を逆アセンブルする際に、ニーモニックに加えて機械語も 16 進数で 表示します。 この動作は --prefix-addresses が指定されていない場合のデフォルトです。

--no-show-raw-insn
    命令を逆アセンブルする際に、機械語を表示しません。 この動作は --prefix-addresses を指定した場合のデフォルトです。

-G
--stabs
    要求されたセクションの全内容を表示します。 ELF ファイルの .stab, .stab.index, .stab.excl セクションの内容を 表示します。 これは ".stab" デバッグシンボルテーブルの エントリが ELF セクションに格納されている (Solaris 2.0 のような) システムでのみ有用です。 他の大部分のファイル形式では、デバッグシンボルテーブルの エントリはリンケージシンボルに差し込まれていて、 --syms での出力で見ることができます。

--start-address=address
    指定されたアドレスからデータの表示を開始します。 これは -d, -r, -s オプションの出力に影響します。

--stop-address=address
    指定されたアドレスでデータの表示を終了します。 これは -d, -r, -s オプションの出力に影響します。

-t
--syms
    シンボルテーブル。 ファイルのシンボルテーブルのエントリを表示します。 これは nm プログラムで得られる情報と似ています。

-T
--dynamic-syms
    ファイルのダイナミックシンボルテーブルの エントリを表示します。 これはある種の共有ライブラリのような ダイナミックオブジェクトでのみ意味があります。 これは nm プログラムに -D (--dynamic) オプションを指定した時に得られる情報と似ています。

-V
--version
    objdump のバージョン番号を表示して終了します。

-x
--all-headers
    得られるすべてのヘッダ情報を表示します。 シンボルテーブルと再配置情報も含まれます。 -x の指定は、 -a -f -h -r -t のすべてを指定するのと等価です。

-w
--wide
    80 桁を越える出力デバイス用に行を整形します。 また、表示するときに、シンボル名を短縮しません。

-z
--disassemble-zeroes
    通常は、逆アセンブル出力では、ゼロブロックを飛ばしますが、 このオプションは、これらのブロックを他のブロックと同様に 逆アセンブルするように指示します。

関連項目
nm(1), readelf(1), Info の binutils の項。

COPYRIGHT
Copyright (c) 1991, 92, 93, 94, 95, 96, 97, 98, 99, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''.

日本語訳
野首 寛高(hnokubi@yyy.or.jp): FreeBSD 用に翻訳