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 はセクションを読み取り、このセクションの内容をダンプすることができます.. どのように? なぜ ?