2009-07-09 10 views

cevap

21

blok yeni çocuk var - pyelftools - ELF ve CÜCE biçimleri ayrıştırmak için bir saf Python kütüphanesine. Bir şans ver.

Bu özellik tam olmayı hedefleyen ve aktif gelişme şu anda, bu nedenle herhangi bir sorun aracı rec olarak kapatmak için

10

"ELF hata ayıklama bilgisi" kavramı gerçekten mevcut değil: ELF belirtimi kasten belirtilmemiş .debug bölümünün içeriğini bırakır.

Sık rastlanan hata ayıklama biçimleri STAB ve DWARF'dur. DWARF okumak için bir kütüphane libdwarf olduğunu.

+0

Evet, oldukça doğru. DWARF, ilgimi çekiyor. –

+1

Soruyu buna göre güncelledim. –

+1

Libdwarf çapraz platform mu, biliyor musunuz? Sayfa söylenmez, ancak genel Unix lezzetine sahip gibi görünüyor. –

5

Burada yararlı bilgiler bulabilirsiniz: CÜCE hata ayıklama bilgilerini okumak için

+0

Teşekkürler, diğer SO sorusunu kaçırdım, sanırım "DWARF" için aramadım. Bu sorunun başlığını güncelleyeceğim. –

4

Seçenekleriniz maalesef oldukça sınırlıdır.

Bildiğim kadarıyla DWARF hata ayıklama bilgilerini ayrıştırmak için tek bir genel kullanım kitaplığı var ve bu da libdwarf. Ne yazık ki hiç kimse libdwarf için Python bağlamaları yazmamış (belki de kendi başınıza alabilir ve herkesle paylaşabilirsiniz :)) ctypes veya Python C API kullanarak kütüphane işlevlerine kesinlikle erişebilirsiniz. Bununla birlikte, daha az zarif bir çözüm, mevcut bir DWARF ayrıştırıcısını kullanmak ve çıktıları olan metin bilgilerini ayrıştırmaktır. (Linux üzerinde) bu seçenekleriniz Şu anda readelf kapalı oluşturur bir proje kullanmak

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

vardır ve çok dolu özellikli CÜCE ayıklama bilgisi için destek var. Kabuktaki komutu çalıştırmak için Python'u kullanabilir ve daha sonra bilgileri istediğiniz gibi ayrıştırabilirsiniz. Kesinlikle bir kütüphane kadar ideal değil, ama hile yapmalı.

DÜZENLEME: Bir önceki yorumda Windows'dan bahsettiğinizi fark ettim. Bu programların her ikisi de (objdump ve readelf) GNU-binutillerin bir parçasıdır, bu yüzden Cygwin veya mingw ile kullanılabilir olmalıdır.

+0

da "cüce çöplüğü" var. – hochl

7

Sen pydevtools gelen CÜCE kütüphanede ilginizi çekebilir:

>>> 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

Bunu bilmek harika. Birkaç soru: 1) Hangi platformlar destekleniyor (Windows, Linux)? 2) [PyPI] 'ye (http://pypi.python.org/pypi) koyabilir misiniz? –

+0

PyPI'de: http://pypi.python.org/pypi/BinTools/0.1.0 – emilmont

+0

Harika! Belgeler desteklenen platformlardan bahsetmiyor. Windows üzerinde çalışıyor mu? –

İlgili konular