2009-07-09 31 views

答えて

21

新顔あります - pyelftools - 純粋なPythonライブラリは、ELFとDWARFフォーマットを解析します。試してみる。

それは、その機能が完全なものとなることを目指して、アクティブな現在開発中ですので、何か問題がツールRECとしてクローズする

10

「ELFデバッグ情報」の概念は実際には存在しません.ELF仕様では、.debugセクションの内容は意図的に指定されていません。

一般的なデバッグ形式はSTABとDWARFです。 DWARFを読み取るライブラリはlibdwarfです。

+0

はい、まあまあです。 DWARFは私が興味を持っているものです。 –

+1

私はそれに応じて質問を更新しました。 –

+1

libdwarfはクロスプラットフォームですか、ご存じですか?このページには言わないが、全体的なUnixの味があるようだ。 –

5

あなたはここに便利な情報を見つけるかもしれない:DWARFデバッグ情報を読み取るための

+0

ありがとう、私は "DWARF"を検索していなかったので、他のSOの質問を逃しました。この質問のタイトルを更新します。 –

4

あなたのオプションは、残念ながら非常に限られています。

私が知る限り、DWARFデバッグ情報を解析するための汎用ライブラリは1つしかなく、libdwarfです。残念ながら誰もlibdwarf用のPythonバインディングを書いていません(多分あなた自身でそれを持ち、他の人と共有することができます:))ctypesまたはPython C APIを使用してライブラリの関数にアクセスしようと試みることは確かです。

ただし、これまでにないDWARFパーサーを使用して出力するテキスト情報を解析することは非常に控えめな解決策です。 (Linuxの場合)、このためのあなたのオプションは、私は現在、readelfがオフのビルドするプロジェクトを使用

objdump -W 
readelf --debug-dump=[OPTIONS] 

であり、それは非常に完全な機能を備えているDWARFデバッグ情報をサポートします。単にPythonを使ってシェルでコマンドを実行し、必要に応じて情報を解析することができます。確かにライブラリとして理想的ではありませんが、そのトリックを行うべきです。

編集:以前のコメントでWindowsに言及していました。これらのプログラム(objdumpとreadelf)はどちらもGNU-binutilsの一部であるため、Cygwinやmingwで利用できるはずです。

+0

'dwarfdump'もあります。 – hochl

7

あなたは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 
[...] 
+0

これは素晴らしいことです。いくつかの質問:1)どのプラットフォームがサポートされていますか(Windows、Linux)? 2)あなたは[PyPI](http://pypi.python.org/pypi)に置くことができますか? –

+0

PyPI上にあります:http://pypi.python.org/pypi/BinTools/0.1.0 – emilmont

+0

素晴らしい!サポートされているプラ​​ットフォームはドキュメントには記載されていません。それはWindows上で動作しますか? –

関連する問題