gpt4 book ai didi

c - 为什么 objdump 不显示 .symtab 部分,而 readelf 却显示?

转载 作者:行者123 更新时间:2023-11-30 16:04:29 25 4
gpt4 key购买 nike

我用 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 能够读取该部分并转储该部分的内容..如何?为什么?

最佳答案

当然存在 symtab 部分;这些工具只是以不同的方式提供信息。 symtab 以这种形式(或类似形式)在 objdump 中列为动态部分(尝试 -x)

...  STRTAB               0x08048408  SYMTAB               0x08048178  STRSZ                0x0000016d...

Objdump 似乎更关注作为“对象”的文件(例如也允许反汇编),而 readelf 更关注 ELF 格式可以提供的信息,即文件“结构”本身。

关于c - 为什么 objdump 不显示 .symtab 部分,而 readelf 却显示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com