【发布时间】:2014-01-24 10:21:02
【问题描述】:
如果我尝试 objdump -t /usr/bin/sort 命令,它会说没有符号。但它似乎适用于我的程序。这是什么原因?
【问题讨论】:
-
你看到文件 /usr/bin/sort 输出了吗?它是否显示剥离的二进制文件。如果它被剥离,你就不能有调试符号
如果我尝试 objdump -t /usr/bin/sort 命令,它会说没有符号。但它似乎适用于我的程序。这是什么原因?
【问题讨论】:
/usr/bin/sort 的符号已被删除,例如使用 strip 程序 - 对于大多数可执行文件,不需要符号表(或仅在调试时需要)。 Here 提供更多信息。
【讨论】:
正如另一个答案所提到的,您的 sort 二进制文件很可能已删除其符号。但是仍然应该有一些动态符号信息,这可能对调试仍然有用。这些通常是动态链接的二进制文件调用的函数的名称。这通常包括 libc 函数,以及您的二进制文件可能已链接的任何其他 lib*.so 共享库。
要查看这些,只需添加 -T 参数:
$ objdump -tT /bin/sort
/bin/sort: file format elf64-x86-64
SYMBOL TABLE:
no symbols
DYNAMIC SYMBOL TABLE:
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 fileno
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 dup2
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 strcoll
...
$
【讨论】: