为什么objdump不显示.symtab部分,而readelf呢?

时间:2010-06-08 09:19:32

标签: c linker elf

我使用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)
....

{/ 1}}和__start_sym的地址差异为零,这意味着输出文件中不会添加此类部分。

但是readelf能够读取该部分并转储本节的内容..怎么样?为什么?

1 个答案:

答案 0 :(得分:1)

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

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

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