2011-08-17 13 views
14

Mam plik obiektów ELF. Chcę wiedzieć, jaki rodzaj informacji o debugowaniu zawiera. Został skompilowany z kompilatorem Diab (źródło C) dla architektury PPC. Jestem prawie pewien, że został zbudowany z symbolami debugowania.Skąd wiadomo, jaki typ informacji o debugowaniu znajduje się w pliku obiektów ELF?

Próbowałem wyodrębnić informacje debugowania za pomocą dwarfdump, ale nie działa, więc myślę, że informacje debugowania nie jest typu DWARF.

$ dwarfdump file.elf 
No DWARF information present in file.elf 

Korzystanie z objdump do wyświetlania informacji do debugowania pojawia się puste.

$ objdump -g file.elf 
file.elf:  file format elf32-powerpc 

Może się okazać, że ten plik ELF nie zawiera informacje debugowania chociaż plik ELF ma sekcje zwane .debug_sfnames, .debug_srcinfo i .debug.srcinfo? Czy informacje debugowania są przechowywane w formacie, którego nie można obsłużyć w przypadku formatu objdump?

+1

Czy możesz gdzieś umieścić plik? –

+3

wypróbuj także z "objdump -W file.elf", na wszelki wypadek. Myślę, że objdump -g nie będzie szczęśliwy, chyba że informacja jest STABS – NullPointer

+1

OK, wymyśliłem to. Cóż, nadal nie wiem, jakie informacje debugowania zawiera plik ELF, ale znalazłem polecenie, aby go wyodrębnić. ddump2 -D elffile załatwia sprawę. Myślę, że ddump2 należy do toolchain, który był dołączony do kompilatora diab. – johnj33

Odpowiedz

6

Należy prawdopodobnie użyć narzędzia nm

NM będą wyświetlane informacje symboliczny pojawiające się w pliku obiekt, plik wykonywalny lub plik biblioteki obiektowe o nazwie pliku. Jeśli dla poprawnego pliku wejściowego nie jest dostępna żadna informacja symboliczna, to narzędzie nm zgłasza ten fakt, ale nie uważa tego za błąd o stanie.

Alternatywnie można użyć narzędzi, takich jak ldd, aby zobaczyć, jakie biblioteki są wymagane przez plik binarny.

3

Wygląda na to, że nikt nigdy nie odpowiedział na twoje aktualne pytanie, które brzmi: jak programowo określić smak symboli debugowania obecnych w danym pliku binarnym ELF. Jak najlepiej mogę powiedzieć, nie jest to wyraźnie podane w ELF; jednak można go wywnioskować na podstawie obecności określonych nazw sekcji w pliku ELF. Na przykład: sekcja o nazwie ".debug_info" zawiera kod DWARF2 lub lepszy, natomiast ".stab" oznacza ukłucia. Szybkie wyszukiwanie w Google z ".debug_sfnames" sugeruje DWARF1. (Nie wiem, dlaczego 'dwarfdump' nie stwierdzono, że ... być może Twój dwarfdump jest dla nowszych krasnoludków i rzucił kompatybilność wsteczną?)

3

W GNU/Linux:

$ readelf --debug-dump=info /absolute/path/to/file | grep "Version" | uniq 

Returns wersja symboli DWARF użyta w pliku binarnym.