ELFファイルのデバッグ情報をDWARF形式で読み取るための優れたクロスプラットフォームライブラリに関する推奨事項はありますか?PythonプログラムでDWARFデバッグ情報を読みたいのですが。
4 に答える
ブロックに新しい子供がいます - pyelftools - ELF および DWARF 形式を解析するための純粋な Python ライブラリです。試してみる。
機能を完全にすることを目指しており、現在活発な開発が行われているため、問題が発生した場合は迅速かつ熱心に処理する必要があります:-)
pydevtoolsの DWARF ライブラリに興味があるかもしれません:
>>> from devtools.dwarf import DWARF
>>> dwarf = DWARF('test/test')
>>> dwarf.get_loc_by_addr(0x8048475)
('/home/emilmont/Workspace/dbg/test/main.c', 36, 0)
>>> print dwarf
.debug_info
COMPILE_UNIT<header overall offset = 0>
<0><11> compile_unit
producer: GNU C 4.4.3
language: C89
name: a/test.c
comp_dir: /home/emilmont/Workspace/dbg/test
low_pc: 0x080483e4
high_pc: 0x08048410
stmt_list: 0
[...]
残念ながら、DWARF デバッグ情報を読み取るためのオプションは非常に限られています。
私の知る限り、DWARF デバッグ情報を解析するための汎用ライブラリはlibdwarf だけです。残念ながら、libdwarf 用の Python バインディングを作成した人は誰もいません (自分で取り上げて他の人と共有できるかもしれません :)) ctypesまたはPython C APIを使用してライブラリの関数にアクセスすることは確かに可能です。
ただし、はるかに洗練されていないソリューションは、既存の DWARF パーサーを使用して、それが出力するテキスト情報を解析することです。これに対するオプション (Linux の場合) は次のとおりです。
objdump -W
readelf --debug-dump=[OPTIONS]
私は現在、readelf から構築されたプロジェクトを使用しています。これは、DWARF デバッグ情報のサポートが非常に充実しています。Python を使用してシェルでいずれかのコマンドを実行し、必要に応じて情報を解析するだけです。確かにライブラリほど理想的ではありませんが、うまくいくはずです。
編集: Windows について言及した以前のコメントで気付きました。これらのプログラム (objdump と readelf) は両方とも GNU-binutils の一部であるため、Cygwin または mingw で利用できるはずです。