我需要知道二進制文件中是否包含調試符號。它是一個生產系統,因此沒有像file
或objdump
或gdb
這樣的命令。如何知道一個二進制文件中是否包含調試符號或沒有文件,objdump或gdb?
可以在需要時提供更多信息。
OS:Debian的
我需要知道二進制文件中是否包含調試符號。它是一個生產系統,因此沒有像file
或objdump
或gdb
這樣的命令。如何知道一個二進制文件中是否包含調試符號或沒有文件,objdump或gdb?
可以在需要時提供更多信息。
OS:Debian的
最簡單的辦法,如果你不知道,如果二進制有符號或不併有你有二進制的實際機上沒有工具,就是用像scp
(安全遠程複製)將文件複製到具有工具的計算機。
正如其他評論所說,使用strings
命令可以打印任何可以發現「看起來像一個字符串」(足夠長的「可打印」字符序列)的任何內容,但它不太可靠,因爲您從未真正知道調試符號是什麼樣子,你可以從宏等
此外,還有許多字符串用於錯誤和記錄條目,它們不是符號... 這是高度的不太可能。 –
可能是你喜歡objdump的
尋找一種工具從包含代碼符號誤報現象比方說,我們有一個小程序像這樣
#include <stdio.h>
int main()
{
printf("Hello ");
return 0;
}
編譯通常現在
gcc example.c -o example
現在可以調試符號的檢查存在使用objdump的工具
objdump -h example | grep debug
,我們不會找到任何當然
現在可以通過編譯再試一次帶調試選件
gcc -g example.c -o example
objdump -h example | grep debug
26 .debug_aranges 00000030 0000000000000000 0000000000000000 000008b0 2**0
27 .debug_pubnames 0000001b 0000000000000000 0000000000000000 000008e0 2**0
28 .debug_info 0000008b 0000000000000000 0000000000000000 000008fb 2**0
29 .debug_abbrev 0000003f 0000000000000000 0000000000000000 00000986 2**0
30 .debug_line 0000003f 0000000000000000 0000000000000000 000009c5 2**0
31 .debug_str 00000087 0000000000000000 0000000000000000 00000a04 2**0
32 .debug_pubtypes 00000012 0000000000000000 0000000000000000 00000a8b 2**0
man -a objdump可能會幫助更多
最棒的是,帶上一些工具吧!
如果你不能,那麼你應該知道的二進制, 在Linux系統上的格式,它是ELF ... 您可以檢查發現".strtab"
和".symtab"
。
如果它們存在,則您的二進制文件中包含所有符號。
另一個想法,就是種植一些符號(例如my_check_symbol_to_see
) 然後用grep這個符號......
將文件複製到具有工具來分析文件一臺機器? –
是的,它可能..讓我試試它。 – VoidPointer
謝謝@MatsPetersson ..它真的有幫助。請發佈它作爲答案。 – VoidPointer