首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >符号在gdb中可用,但在objdump/nm输出中缺失

符号在gdb中可用,但在objdump/nm输出中缺失
EN

Stack Overflow用户
提问于 2020-01-20 00:09:46
回答 1查看 299关注 0票数 2

在Fedora31上,我看到gdb知道一些系统二进制文件的符号,例如/usr/bin/truemain

代码语言:javascript
复制
$ gdb -ex 'set height 0' -ex 'disas main' -ex q /bin/true
Reading symbols from /bin/true...
Reading symbols from .gnu_debugdata for /usr/bin/true...
(No debugging symbols found in .gnu_debugdata for /usr/bin/true)
Dump of assembler code for function main:
   0x0000000000002550 <+0>: endbr64 
   0x0000000000002554 <+4>: cmp    edi,0x2
[..]

但是main不会出现在objdump -d或者‘`nm输出中:

代码语言:javascript
复制
$ objdump -d /usr/bin/true | grep '\<main\>'
$ nm /usr/bin/true | grep main
nm: /usr/bin/true: no symbols
$ nm -D /usr/bin/true | grep '\<main\>'
$

怎么会这样?gdb能从一些额外的符号表中读取主symbol吗?

当我和gcc一起编译我自己的二进制文件时,nm/objdump会像预期的那样显示main符号。此外,当我剥离这样的二进制文件时,gdb也找不到main符号。

我假设rpmbuild使用一些导致上述行为的特殊标志来调用gcc/strip。那些是什么?

EN

Stack Overflow用户

发布于 2020-01-20 02:11:03

gdb可以从一些额外的符号表中读取主符号吗?

是:包含在.gnu_debugdata部分中的那个。更多信息here

gdb还会输出:在.gnu_debugdata中找不到/usr/bin/true的调试符号

GDB说:没有调试符号(即带有文件/行信息、变量信息等的符号)。它不会说“没有符号”(即你会在nm输出中看到的东西)。事实上,符号首先是.gnu_debugdata存在的理由。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59811882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档