我需要知道一个二进制文件中是否有调试符号。它是一个生产系统,所以没有像file或objdump或gdb这样的命令。可以在需要时提供更多信息。操作系统:Linux
file
objdump
gdb
ghg1uchk1#
您可能正在寻找类似***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可能会帮助更多
qncylg1j2#
如果您不知道二进制文件是否有符号,并且在安装二进制文件的实际机器上没有工具,那么简单的解决方案是使用类似scp(安全远程复制)的方法将文件复制到具有工具的机器上。正如另一条评论所说,使用strings命令,它会打印任何“看起来像字符串”的东西(足够长的“可打印”字符序列),但它并不那么可靠,因为您永远不知道调试符号是什么样子的,并且您可能会从包含宏等符号的代码中得到误报。
scp
strings
kxxlusnw3#
最棒的是,带上一些工具!如果你不能,那么你应该知道二进制文件的格式,在Linux系统上,它是ELF...你可以检查找到像.symtab或.debug_这样的部分。如果它们存在,那么你的二进制文件中就有了所有的符号。另一个想法是植入一些符号(例如my_check_symbol_to_see),然后grep这个符号...
.symtab
.debug_
my_check_symbol_to_see
3条答案
按热度按时间ghg1uchk1#
您可能正在寻找类似***objdump***的工具
假设我们有这样一个小程序
现在正常编译
现在让使用objdump工具检查调试符号是否存在
我们当然找不到了
现在,让我们通过使用调试选项进行编译来重试
man -a objdump可能会帮助更多
qncylg1j2#
如果您不知道二进制文件是否有符号,并且在安装二进制文件的实际机器上没有工具,那么简单的解决方案是使用类似
scp
(安全远程复制)的方法将文件复制到具有工具的机器上。正如另一条评论所说,使用
strings
命令,它会打印任何“看起来像字符串”的东西(足够长的“可打印”字符序列),但它并不那么可靠,因为您永远不知道调试符号是什么样子的,并且您可能会从包含宏等符号的代码中得到误报。kxxlusnw3#
最棒的是,带上一些工具!
如果你不能,那么你应该知道二进制文件的格式,在Linux系统上,它是ELF...你可以检查找到像
.symtab
或.debug_
这样的部分。如果它们存在,那么你的二进制文件中就有了所有的符号。
另一个想法是植入一些符号(例如
my_check_symbol_to_see
),然后grep这个符号...