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


31

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

回答:


54

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


11

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

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


0

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

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

libc.so.6明らかに共有オブジェクトです。
ジル 'SO-悪であるのをやめる'

Linux環境では想定していません。誰かがルートディレクトリに触れた可能性があることを考慮してください。はい、名前で言うと明らかに共有オブジェクトです。また、検証するのに問題はありません。期待した出力が得られないとき。
jncc99
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.