11

私は、16 進アドレスをシンボリック関数名とバイナリ内のソース コード行番号に解決する必要があるユーティリティに取り組んでいます。このユーティリティは Linux on x86 で実行されますが、分析するバイナリは MIPS ベースの組み込みシステム用です。MIPS バイナリは ELF 形式で、シンボリック デバッグ情報に DWARF を使用します。

現在、objdump をフォークして、16 進アドレスのリストを渡し、出力を解析して関数名とソース行番号を取得することを計画しています。MIPS バイナリをサポートする objdump をコンパイルしましたが、動作しています。

別のプロセスをフォークすることなく、Python コードからネイティブに検索できるパッケージを用意したいと考えています。python.org で libdwarf、libelf、または libbfd についての言及も、dwarfstd.org での python についての言及も見つかりません。

どこかに利用可能な適切なモジュールはありますか?

4

6 に答える 6

8

pydevtoolsの DWARF ライブラリに興味があるかもしれません:

>>> from bintools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
于 2010-09-05T17:29:19.353 に答える
5

これを行うための新しい純粋な Python ライブラリであるpyelftoolsを確認してください。

于 2012-01-06T07:11:55.193 に答える
4

コンストラクトを試してみてください。バイナリ データを python オブジェクトに解析することは非常に便利です。

ELF32ファイル形式の例もあります。

于 2009-02-04T09:19:06.753 に答える
3

私は何も知りませんが、他のすべてが失敗した場合は、ctypesを使用して libdwarf、libelf、または libbfd を直接使用できます。

于 2008-09-05T15:23:13.250 に答える
3

Constructを使用して DWARF パーサーを開発しています。現在かなりラフで、解析が遅いです。でもせめて通報しなきゃと思った。ちょっとした作業で、ニーズに合うかもしれません。

Bitbucket でホストされている Mercurial のコードを取得しました。

Constructは非常に興味深いライブラリです。DWARF は (私が発見したように) 複雑なフォーマットであり、Construct を限界まで押し上げていると思います。

于 2009-08-30T00:48:04.057 に答える
2

hachiorは、バイナリ データを解析するための別のライブラリです。

于 2010-06-11T14:23:05.163 に答える