Linux ELFバイナリのアセンブリコードを見るためにobjdump
を使用しています。
rodata
(読み取り専用データ)セクションに保存されているジャンプテーブルを介した間接ジャンプが発生する場合があります。
このデータセクションの内容を表示するobjdump
またはその他のツールを取得する方法
プログラムを実行し、デバッガーで関連するアドレスを調べることはできますが、対話的に実行する必要があるため、そうしたくありません。
理想的な答えは、コンテンツを表示するだけでなく、od
と同じように表示形式を制御できるツールを特定することです。
objdump -s -j .rodata exefile
次のようなrodata
セクションの内容の並列16進/印刷可能ASCIIダンプ)を提供します。
Contents of section .rodata:
0000 67452301 efcdab89 67452301 efcdab89 gE#.....gE#.....
0010 64636261 68676665 64636261 68676665 dcbahgfedcbahgfe
書式設定を制御するものがそこにあるようには見えませんが、それは始まりです。いつでもヘックスをアンダンプしてodに送ることができると思います:)
readelf -x .rodata hello_world.o
与える:
Hex dump of section '.rodata':
0x00000000 48656c6c 6f20776f 726c6421 0a Hello world!.
readelf
は.symtab
のような一部のセクションを表示しないため、可能な場合はobjdump
を優先する必要があります。 、.symtabおよび.strtabセクション?
で説明されている手法で生バイトを抽出することもできます。ELFセクション の内容のみをどのように抽出しますか by ysdx .
以下を使用して、RAW(hexdumpedではない)ELFセクションを取得できます。
# To a file:
objcopy file /dev/null --dump-section .text=text.data
# To stdout:
objcopy file /dev/null --dump-section .text=/dev/stdout | cat
ここでは、stdoutを強制的にパイプにするために| cat
を使用しています。 stdoutがファイルの場合、/dev/stdout
は予期せず動作する場合があります。 .text=-
は標準出力ではなく、-
ファイルに送信します。
ただし、 objcopyとobjdumpにはいくつかの欠陥があります (異なる実行可能形式を抽象化するBFDに基づいているため)。
更新: これを行うために、BFDに依存しない tool を作成しました。