簡體   English   中英

如何在沒有文件,objdump或gdb的情況下知道二進制文件是否包含調試符號?

[英]how to know if a binary contains debugging symbols or not without file, objdump or gdb?

我需要知道二進制文件中是否包含調試符號。 它是一個生產系統,所以沒有像fileobjdumpgdb這樣的命令。

可以在需要時提供更多信息。

操作系統:Debian

可能你正在尋找像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

男人 - 一個objdump可能會幫助更多

簡單的解決方案,如果你不知道二進制文件是否有符號,並且在你有二進制文件的實際機器上沒有工具,就是使用scp (安全遠程復制)之類的東西將文件復制到一台機器上有工具。

正如另一條評論所說,使用strings命令打印任何它發現“看起來像一個字符串”的東西(一個足夠長的“可打印”字符序列),但它不太可靠,因為你從來不知道調試是什么符號看起來像,你可以從包含宏等符號的代碼中得到誤報。

最重要的是,隨身攜帶一些工具!

如果你不能,那么你應該知道Binary的格式,在Linux系統上,它是ELF ...你可以檢查找到".strtab"".symtab"
如果它們存在,則您的二進制文件中包含所有符號。

另一個想法是, my_check_symbol_to_see一些符號(例如my_check_symbol_to_see ),然后grep這個符號......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM