2009-07-09 3 views

답변

21

블록에 새로운 아이가있다 - pyelftools - 엘프와 DWARF 형식을 구문 분석을위한 순수한 파이썬 라이브러리입니다. 시도 해봐.

그것은 기능을 완료하는 것을 목표로하고 활성 현재 개발중인, 그래서 어떤 문제가 도구 REC로 닫습니다

10

"ELF 디버그 정보"개념은 실제로 존재하지 않습니다. ELF 사양은 .debug 섹션의 내용을 의도적으로 지정하지 않습니다.

일반적인 디버그 형식은 STAB 및 DWARF입니다. DWARF를 읽을 라이브러리는 libdwarf입니다.

+0

예, 그렇습니다. DWARF가 내가 관심있어하는 것입니다. –

+1

그에 따라 질문을 업데이트했습니다. –

+1

libdwarf 크로스 플랫폼인가요? 이 페이지는 말하지 않지만 전반적인 유닉스의 맛을 가지고있는 것으로 보인다. –

5

당신은 여기에 유용한 정보를 찾을 수 있습니다 : 드워프 디버깅 정보를 읽기위한

+0

고마워, 나는 그 다른 질문을 놓쳤다. 왜냐하면 나는 "DWARF"를 찾고 있지 않았기 때문이다. 이 질문의 제목을 업데이트하겠습니다. –

4

귀하의 옵션은 불행하게도 매우 제한적입니다.

내가 아는 한 DWARF 디버깅 정보를 구문 분석하기위한 유일한 범용 라이브러리는 libdwarf입니다. 불행히도 아무도 libdwarf를위한 Python 바인딩을 작성하지 못했습니다 (어쩌면 당신이 그것을 다른 사람들과 공유 할 수 있습니다 :)) ctypes 또는 Python C API을 사용하여 확실히 라이브러리 함수에 액세스하려고 시도 할 수 있습니다.

그러나 훨씬 덜 우아한 해결책은 기존 DWARF 파서를 사용하여 출력하는 텍스트 정보를 파싱하는 것입니다. (리눅스에서) 이것에 대한 옵션은 내가 현재 readelf 떨어져 빌드 프로젝트를 사용

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

하고 매우 완전한 기능을 갖춘되어 DWARF 디버깅 정보에 대한 지원이다. 파이썬을 사용하여 쉘에서 명령을 실행 한 다음 필요에 따라 정보를 구문 분석 할 수 있습니다. 확실히 도서관만큼이나 이상적이지는 않지만 그 트릭을해야합니다.

편집 : 이전에 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에서도 작동합니까? –

관련 문제