2010-06-08 22 views
0

我使用gcc編譯了一個簡單的程序,如果我使用objdump看到section header,它不會顯示部分.symtab。對於相同的a.out文件,readelf顯示該部分:爲什麼objdump在readelf時不顯示.symtab節?

[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) 
.... 

的差的B/W的__start_sym的地址和__end_sym是零,這意味着沒有這樣的部分在輸出文件加入。

但readelf能夠讀取該部分並轉儲此部分的內容..如何?爲什麼?

+0

即使你做'objdump -x'? – James 2010-06-08 09:46:12

+0

'objdump -t file'和'readelf -s file'應該以不同的方式給出相同的信息 – ShinTakezou 2010-06-08 12:55:04

回答

1

當然symtab部分存在;這些工具只是以不同的方式提供信息。的符號表被列爲objdump的動態部分以這種形式(嘗試-x)(或類似)

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

objdump的似乎更側重於該文件作爲「對象」(允許例如拆卸過),而readelf更關於ELF格式可以提供的信息,即文件「結構」本身。