16

ELF オブジェクト ファイルがあります。どのタイプのデバッグ情報が含まれているか知りたいです。PPC アーキテクチャ用の Diab コンパイラ (C ソース) でコンパイルされています。私はそれがデバッグシンボルで構築されたと確信しています。

でデバッグ情報を抽出しようとしましdwarfdumpたが、うまくいかないので、デバッグ情報は DWARF 型ではないと思います。

$ dwarfdump file.elf
No DWARF information present in file.elf

objdump を使用してデバッグ情報を表示すると、何も表示されません。

$ objdump -g file.elf 
file.elf:     file format elf32-powerpc

.debug_sfnamesELF ファイルには、.debug_srcinfoおよび と呼ばれるセクションがありますが、この ELF ファイルにはデバッグ情報が含まれていない可能性があり.debug.srcinfoますか? または、デバッグ情報objdumpが処理できない形式で保存されていますか?

4

3 に答える 3

7

おそらくnmを使用する必要があります

nmユーティリティは、オブジェクトファイル、実行可能ファイル、またはファイルで指定されたオブジェクトファイルライブラリに表示されるシンボリック情報を表示します。有効な入力ファイルに使用できるシンボリック情報がない場合、nmユーティリティはその事実を報告しますが、エラー状態とは見なしません。

または、のようなツールを使用lddして、バイナリに必要なライブラリを確認することもできます。

于 2011-10-18T02:46:46.593 に答える
6

GNU/Linux の場合:

$ readelf --debug-dump=info /absolute/path/to/file | grep "Version" | uniq

バイナリで使用される DWARF シンボルのバージョンを返します。

于 2014-12-16T16:02:53.903 に答える
6

実際の質問、つまり、特定の ELF バイナリに存在するデバッグ シンボルのフレーバーをプログラムで判断する方法について、誰も答えたことがないようです。私が知る限り、これは ELF 内で明示的に指定されていません。ただし、ELF ファイル内の特定のセクション名の存在によって推測できます。たとえば、「.debug_info」という名前のセクションは DWARF2 以上を意味し、「.stab」はスタブを意味します。「.debug_sfnames」をすばやくグーグル検索すると、DWARF1 が示唆されます。(あなたの 'dwarfdump' がそれを識別しなかった理由はわかりません...おそらくあなたの dwarfdump は新しい DWARF 用であり、後方互換性がダンプされていますか?)

于 2014-05-31T00:43:29.900 に答える