Linux共有ライブラリがエクスポートしている関数のリストを表示するにはどうすればよいですか?


回答:


307

必要なものnmとその-Dオプション:

$ nm -D /usr/lib/libopenal.so.1
.
.
.
00012ea0 T alcSetThreadContext
000140f0 T alcSuspendContext
         U atanf
         U calloc
.
.
.

エクスポートされたsumbolsはで示されますT。他の共有オブジェクトからロードする必要のある必須シンボルには、がありますU。シンボルテーブルには関数だけではなく、エクスポートされた変数も含まれていることに注意してください。

詳細はnm マニュアルページ参照してください。


18
または、エクスポートされたシンボルのみを表示したい場合は、「-defined-only」フラグを追加します。例えば: "NM -D --defined専用/lib/libtest.so"
のShervin Emami

3
Mac OS Xではnm-Dフラグなしで使用してください。
JPaget 2014年



1

すでに言及されている他のツールの中で、使用することもできますreadelf手動)に似てobjdumpいますが、さらに詳しく説明しています。違いの説明はこちらをご覧ください。

$ readelf -sW /lib/liblzma.so.5 |head -n10

Symbol table '.dynsym' contains 128 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_unlock@GLIBC_2.0 (4)
     2: 00000000     0 FUNC    GLOBAL DEFAULT  UND pthread_mutex_destroy@GLIBC_2.0 (4)
     3: 00000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable
     4: 00000000     0 FUNC    GLOBAL DEFAULT  UND memmove@GLIBC_2.0 (5)
     5: 00000000     0 FUNC    GLOBAL DEFAULT  UND free@GLIBC_2.0 (5)
     6: 00000000     0 FUNC    GLOBAL DEFAULT  UND memcpy@GLIBC_2.0 (5)

readelfを使用してエクスポートされたシンボルを検索するにはどうすればよいですか?それは私に圧倒的な量の出力を与えます。
Juraj Martinka
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.