web-dev-qa-db-ja.com

nmが/lib/i386-linux-gnu/libc.so.6のシンボルを表示しないのはなぜですか?

libc.so.6ファイルにprintfを含むシンボルの数が表示されるはずです。私はnmツールを使用してそれらを見つけましたが、libc.so.6にはシンボルがないと表示されています。

34
masec

おそらく通常のシンボルが取り除かれ、残っているのはnm -Dで取得できる動的シンボルです。

59
PSkocik

@PSkocikがこれに答えました。詳細を追加したいだけです。 ELFには2種類のシンボルセクションがあります:.symtab.dynsym(詳細は Linux Standard Base Core Specification、別名LSB_5.0. を参照)。 .symtabは、共有ライブラリ自体のリンク手順です。リンクが完了すると、.symtabセクションは不要になります。 .dynsymセクションには、実行時にダイナミックリンカーによって検索されることになっている重要なシンボルが含まれています。 nmはデフォルトで.symtabセクションのシンボルのみをダンプします。

LSB_5.0. セクション10.2.2.1の「ELFセクションタイプ」では、準拠している共有ライブラリには.symtabまたは.dynsymのいずれかが必要ですが、両方は必要ではありません。 ABIライブラリの一部として、libcは.symtabから削除され、仕様に準拠しています。

13
kula85

共有オブジェクトであるか、通常のASCIIファイルであるかを確認します。共有オブジェクトである場合は、「ELF 32ビットLSB共有オブジェクト」が表示されます。

file /lib/i386-linux-gnu/libc.so.6
0
jncc99