DWARF biçimindeki ELF dosyası hata ayıklama bilgilerini okumak için iyi bir çapraz platform kitaplığı için herhangi bir öneriniz var mı? Bir Python programında DWARF hata ayıklama bilgisini okumak isterim.Kitap ELF dosyası okunacak DWARF hata ayıklama bilgisi
cevap
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
"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.
Evet, oldukça doğru. DWARF, ilgimi çekiyor. –
Soruyu buna göre güncelledim. –
Libdwarf çapraz platform mu, biliyor musunuz? Sayfa söylenmez, ancak genel Unix lezzetine sahip gibi görünüyor. –
Burada yararlı bilgiler bulabilirsiniz: CÜCE hata ayıklama bilgilerini okumak için
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. –
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.
da "cüce çöplüğü" var. – hochl
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
[...]
Bunu bilmek harika. Birkaç soru: 1) Hangi platformlar destekleniyor (Windows, Linux)? 2) [PyPI] 'ye (http://pypi.python.org/pypi) koyabilir misiniz? –
PyPI'de: http://pypi.python.org/pypi/BinTools/0.1.0 – emilmont
Harika! Belgeler desteklenen platformlardan bahsetmiyor. Windows üzerinde çalışıyor mu? –
Oy :-) hızlı ve şevkle ele alınmalıdır. –