为什么 objdump 不显示 .symtab 部分,而 readelf 却显示?
我使用 gcc 编译一个简单的程序,如果我使用 objdump 看到节头,它不会显示节 .symtab
。对于同一个 a.out
文件,readelf 显示以下部分:
[25] .symtab SYMTAB 00000000 000ca4 000480 10 26 2c 4
[26] .strtab STRTAB 00000000 001124 00025c 00 0 0 1
为什么?
在默认链接器脚本中,我没有找到 .symtab
部分的定义。 如果我像在链接描述文件中一样自己添加定义:
....
PROVIDE(__start_sym)
.symtab : { *(.symtab)}
PROVIDE(__end_sym)
....
__start_sym 和 __end_sym 的地址之间的差异为零,这意味着在输出文件。
但是 readelf 能够读取该部分并转储该部分的内容..如何?为什么 ?
I compile a simple program with gcc and if I see the section header using objdump, it does not show the section .symtab
. for the same a.out
file, readelf shows the section:
[25] .symtab SYMTAB 00000000 000ca4 000480 10 26 2c 4
[26] .strtab STRTAB 00000000 001124 00025c 00 0 0 1
Why?
In the default linker script I don't find a definition for .symtab
section.
If I add a definition by myself like in the linker script :
....
PROVIDE(__start_sym)
.symtab : { *(.symtab)}
PROVIDE(__end_sym)
....
the difference b/w the addresses of __start_sym
and __end_sym
is zero, which means no such section is added in the output file.
But the readelf is able to read the section and dump the contents of this section .. How ? why ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
当然,
symtab
部分是存在的;这些工具只是以不同的方式提供信息。 symtab 被列为 objdump 中的动态部分(尝试-x
),以这种形式(或类似形式)Objdump 似乎更关注文件作为“对象”(允许例如反汇编),而 readelf更多关于 ELF 格式可以提供的信息,即文件“结构”本身。
Of course the
symtab
section is present; the tools just provide information in a different way. The symtab is listed as a dynamic section in objdump (try-x
) in this form (or alike)Objdump seems more focusing on the file as "object" (allowing e.g. to disassemble too), while readelf more on the information ELF format can provide, i.e. on the file "structure" itself.