2011-08-17 14 views
14

我有一個ELF對象文件。我想知道它包含哪種類型的調試信息。 它是用Diab編譯器(C源代碼)爲PPC體系結構編譯的。我很確定它是用調試符號構建的。如何知道ELF對象文件中的調試信息類型?

我試過提取調試信息與dwarfdump,但我不工作,所以我猜測調試信息是不是類型DWARF。

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

使用objdump顯示調試信息出現空白。

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

它可以是這個ELF文件不包含調試信息,即使ELF文件的部分叫.debug_sfnames.debug_srcinfo.debug.srcinfo?或者調試信息以objdump無法處理的格式存儲?

+1

你可以將文件發佈到某個地方嗎? –

+3

嘗試使用「objdump -W file.elf」以防萬一。我認爲objdump -g不會很開心,除非信息是STABS – NullPointer

+1

好吧,我想通了。那麼我仍然不知道ELF文件包含哪些類型的調試信息,但是我找到了提取它的命令。 ddump2 -D elffile會訣竅。我認爲ddump2屬於diab編譯器附帶的工具鏈。 – johnj33

回答

6

你或許應該使用nm

的納米工具將顯示出現在 目標文件中的符號信息,可執行文件或對象文件的文件名爲庫。如果 沒有符號信息可用於有效的輸入文件,則nm 實用程序應報告該事實,但不會將其視爲錯誤 條件。

或者,您可以使用工具如ldd來查看二進制文件需要哪些庫。

3

似乎沒有人回答過你的實際問題,即:如何以編程方式確定給定ELF二進制文件中存在的調試符號的味道。盡我所知,這並非ELF中明確給出的;然而,它可以通過在ELF文件中存在特定部分名稱來推斷。例如:名爲「.debug_info」的部分意味着DWARF2或更高版本,而「.stab」意味着刺傷。 「.debug_sfnames」的快速搜索建議使用DWARF1。 (我不知道爲什麼你的「dwarfdump」沒有確定......也許你dwarfdump是較新的小矮人,和甩向後兼容性?)

3

在GNU/Linux的:

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

返回二進制文件中使用的DWARF符號版本。

相關問題