次: , 前: objcopy, 上: Top


4 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]
             [--special-syms]
             [-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から 少なくとも一つのオプションを与える必要があります.

-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
     

それは,fu.oのセクションヘッダ(-h)からの情報の概要を表 示し,それは特に,Oasysコンパイラで生成されるフォーマットのVAXオブジェ クトファイルとして認識(-m)されます.-iオプションを用 いて利用可能なフォーマットをリストアップすることが可能です.詳細は, See Target Selection.

-C
--demangle[=style]
低レベルのシンボル名をユーザレベルの名前に復号(demangle)します. システムによって前置される,最初のすべてのアンダースコアを削除するだけ でなく.これはC++関数名を可読にします.別々のコンパイラでは,mangle形式 が異なります.追加のdemangle形式の引数は,コンパイラに対する適切な demangle形式を選択するために使用することが可能です.demangleの情報は, See c++filt.
-g
--debugging
デバッグ情報を表示します.これは,ファイルに保存されているデバッグ情報 の解析を試み,Cのような構文を使用してそれを出力します.デバッグ情報の特 定の形式のみ実装されています.他の形式も,いくつかはreadelf -wでサポートされています.See readelf.
-e
--debugging-tags
-gに似ていますが,情報は,ctagツール互換の書式で生成されます.
-d
--disassemble
objfileから,機械語命令に対するアセンブラニーモニックを表示します. このオプションは,命令を含むことを期待されるそれらのセクションを,逆ア センブルするだけです.
-D
--disassemble-all
-dに似ていますが,命令を含むことを期待されるものだけでなく,す べてのセクションの内容を逆アセンブルします.
--prefix-addresses
逆アセンブルしているとき,それぞれの行に絶対アドレスを出力します.これ はより古い逆アセンブルの書式です.
-EB
-EL
--endian={big|little}
オブジェクトファイルのエンディアンを指定します.これは逆アセンブラにの み効果があります.これは,S-recordのような,エンディアン情報を記述して いないファイルフォーマットを逆アセンブルしているとき役に立つはずです.
-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-recordのような,アーキテクチャ情報が記述されていないオ ブジェクトファイルを逆アセンブルするとき役に立ちます.-iオプショ ンを用いて,利用可能なアーキテクチャをリストアップすることが可能です.
-M options
--disassembler-options=options
ターゲット指定の情報を逆アセンブラに渡します.いくつかのターゲットだけ をサポートします.一つ以上の逆アセンブラオプションが必要な場合,複数の -Mオプションを使用したり,カンマで分離したリストで一度に与える ことが可能です.

ターゲットがARMアーキテクチャの場合,逆アセンブラが使用されている間に使 用するレジスタ名のセットを選択するために,このスイッチを使用することが 可能です.-M reg-name-std (デフォルト)を指定すると,ARMの命令 セットのドキュメントで使用しているレジスタ名を選択し,'sp'と呼ばれるレ ジスタ13,'lr'と呼ばれるレジスタ14,そして'pc'と呼ばれるレジスタ15を使 用します.-M reg-names-apcsを指定すると,ARM Procedure Call Standardで使用されている名前のセットを選択するのに対し,-M reg-names-rawを指定すると,`r'にレジスタ番号が続いたものを使用し ます.

APCSレジスタ命名規則には二つの変形があり,-M reg-names-atpcs-M reg-names-special-atpcsにより利用可能で,それはARM/Thumb Procedure Call Standard命名規約を使用します.(通常のレジスタ名,または, 特殊なレジスタ名のどちらかを使用します.)

このオプションは,ARMアーキテクチャに対し,スイッチ --disassembler-options=force-thumbを使用して,すべての命令を Thumb命令として解釈するように逆アセンブラに強制するためにも使用すること が可能です.他のコンパイラで生成される thumb コードの逆アセンブラを試み るとき,これは役に立つはずです.

x86に対して,オプションによっては-mのスイッチの機能を複製しま すが,よりきめ細かい制御が可能になります.以下の複数のセクションをカン マで分けられた文字列として指定してもかまいません.x86-64i386,そしてi8086は該当するアーキテクチャに対する逆ア センブルを選択します.intelattは,インテルの構文の モードとAT&Tの構文のモードを選択します.addr32addr16data32,そしてdata16は,デフォルトの アドレスの大きさとオペランドの大きさを指定します.これらの四つのオプショ ンは,それ以降のオプション文字列にx86-64i386,また はi8086が現れる場合は,そちらが優先されます.最後は suffixで,これはAT&Tモードのとき,サフィックスがオペランドで推 測可能なときでさえ,逆アセンブラはニーモニックサフィックスを出力します.

PPCに対し,bookebooke32,そしてbooke64は BookE命令の逆アセンブラを選択します.3264は,それぞ れPowerPCとPowerPC64の逆アセンブラを選択します.

MIPSに対して,このオプションは逆アセンブルした命令でのニーモニック名と レジスタ名の出力を制御します.以下を複数選択するため,カンマで分離した 文字列で指定することが可能で,無効のオプションは無視されます.

no-aliases
偽の命令ニーモニックではなく,'raw'の命令ニーモニックを出力します.つま り,'move'の代わりに'daddu'や'or'を,'nop'の代わりに'sll'を出力する等の ようになります.
gpr-names=ABI
GPR(general-purpose register(汎用レジスタ))名を,指定されたABIに対して 適切に出力します.デフォルトで,GPR名は,逆アセンブルされたバイナリの ABIに対応して選択されます.
fpr-names=ABI
FPR(floating-point register(浮動小数点レジスタ))名を,指定されたABIに対 して適切に出力します.デフォルトで,FPR番号が,名前の代わりに出力されま す.
cp0-names=ARCH
CP0(system control coprocessor; coprocessor 0(システム制御コプロセッサ; コプロセッサ0))レジスタ名を,CPUまたはARCHで指定されたアーキテク チャに対して適切に出力します.デフォルトで,CP0レジスタ名は,逆アセンブ ルされたバイナリのアーキテクチャとCPUに対応して選択されます.
hwr-names=ARCH
HWR(rdhwr命令で使用される,hardware register(ハードウェアレジス タ))名を,CPUまたはARCHで指定されたアーキテクチャに対して適切に出 力します.デフォルトで,HWR名は,逆アセンブルされたバイナリのアーキテク チャとCPUに対応して選択されます.
reg-names=ABI
GPRとFPR名を選択されたABIに対して適切に出力します.
reg-names=ARCH
CPU特有のレジスタ名(CP0レジスタとHWRの名前)を,選択されたCPUやアーキテ クチャに対して適切に出力します.

上記でリストアップされているすべてのオプションに対し,ABIARCHは,選択されているレジスタに対する名前ではなく,出力される番 号となる`numeric'として指定します.--helpを使用して,利用 可能なABIARCHの値をリストアップすることが可能です.

-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の出力で見ることが可 能となります.

スタブシンボルの詳細は,Stabsを参照してください.

--start-address=address
データの表示を,指定したアドレスで開始します.これは-d-r,そして-sオプションの出力に効果があります.
--stop-address=address
データの表示を,指定したアドレスで停止します.これは-d-r,そして-sオプションの出力に効果があります.
-t
--syms
ファイルのシンボルテーブルのエントリーを出力します.これは,`nm' プログラムで提供される情報に似ています.
-T
--dynamic-syms
ファイルの動的シンボルテーブルのエントリーを表示します.これは,特定の 形式の共有ライブラリのような,動的オブジェクトに対してのみ意味がありま す.これは,-D (--dynamic)オプションが与えられている `nm'プログラムで提供される情報に似ています.
--special-syms
表示するとき,なんらかの方法で,ターゲットが特殊なものだと考えたり,通 常はユーザに興味が無いものを含めます.
-V
--version
objdumpのバージョンナンバーを出力し終了します.
-x
--all-headers
利用可能なヘッダ情報をすべて表示し,それにはシンボルテーブルと,再配置 エントリが含まれます.-xを用いると,-a -f -h -p -r -tをすべて指定したものと等価になります.
-w
--wide
80列以上の出力デバイスに対し,数行で書式化します.また,表示するときに シンボル名を切り詰めません.
-z
--disassemble-zeroes
通常,逆アセンブルの出力はゼロのブロックを省略します.このオプションは, これらのブロックを逆アセンブルするため,他のデータと同様,直接逆アセン ブルします.