2009-07-09 158 views

回答

21

有塊一個新的孩子 - pyelftools - 一個純Python庫解析ELF和DWARF格式。試一試。

它的目標是成爲功能完善,目前在積極發展,所以任何問題,應迅速和積極處理:-)

10

「ELF調試信息」的概念並不存在:ELF規範故意沒有指定.debug部分的內容。

常見的調試格式是STAB和DWARF。讀取DWARF的庫是libdwarf

+0

是的,非常正確。 DWARF是我感興趣的。 – 2009-07-09 02:28:41

+1

我相應地更新了問題。 – 2009-07-09 02:31:13

+1

是libdwarf跨平臺,你知道嗎?該頁面沒有說,但似乎有一個整體的Unix味道。 – 2009-07-14 07:59:49

4

您的閱讀矮調試信息選項遺憾的是相當有限的。

據我所知,解析DWARF調試信息只有一個通用庫,那就是libdwarf。不幸的是,沒有人爲libdwarf編寫Python綁定(也許你可以自己把它與其他人分享:))你當然可以嘗試使用ctypesPython C API來訪問庫函數。

然而,一個不太優雅的解決方案是使用現有的DWARF解析器並解析它輸出的文本信息。您的這個選項(在Linux上)是

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

我目前使用過建立的readelf一個項目,它是對矮調試信息非常全功能的支持。您可以簡單地使用Python在shell中執行任一命令,然後根據需要解析信息。當然,不如圖書館理想,但應該做的伎倆。

編輯:我注意到你在之前的評論中提到過Windows。這兩個程序(objdump和readelf)都是GNU-binutils的一部分,所以它們應該可用於Cygwin或mingw。

7

你可能會感興趣的DWARF庫從pydevtools

>>> 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 
[...]