9

我需要知道二进制文件中是否有调试符号。它是一个生产系统,因此没有fileor objdumpor之类的命令gdb

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

操作系统:Debian

4

3 回答 3

10

可能您正在寻找像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可能会帮助更多

于 2014-07-09T08:49:41.940 回答
1

如果您不知道二进制文件是否有符号并且您拥有二进制文件的实际机器上没有工具,那么简单的解决方案是使用scp(安全远程复制)之类的东西将文件复制到一台机器上有工具。

正如另一条评论所说,使用该strings命令打印它发现的任何“看起来像一个字符串”(足够长的“可打印”字符序列),但它并不那么可靠,因为你永远不知道调试符号是什么看起来像,你可以从包含宏等符号的代码中得到误报。

于 2013-07-03T20:17:11.137 回答
1

最重要的是,随身携带一些工具!

如果你不能,那么你应该知道二进制的格式,在 Linux 系统上,它是 ELF ......你可以检查找到".strtab"".symtab".
如果它们存在,您的二进制文件中就有所有符号。

另一个想法是种植一些符号(例如my_check_symbol_to_see)然后grep这个符号......

于 2016-06-01T10:36:47.380 回答