.so ファイル内のシンボルをリストするにはどうすればいいですか? 質問する

.so ファイル内のシンボルをリストするにはどうすればいいですか? 質問する

.so ファイルからエクスポートされるシンボルを一覧表示するにはどうすればよいでしょうか? 可能であれば、そのソースも知りたいです (たとえば、静的ライブラリから取り込まれたかどうかなど)。

違いがあるかどうかはわかりませんが、私は gcc 4.0.2 を使用しています。

ベストアンサー1

シンボルをリストするための標準ツールは でnm、次のように簡単に使用できます。

nm -gD yourLib.so

C++ ライブラリのシンボルを表示する場合は、シンボルをデマングルする「-C」オプションを追加します (デマングルするとはるかに読みやすくなります)。

nm -gDC yourLib.so

.so ファイルが elf 形式の場合、次の 2 つのオプションがあります。

いずれかobjdump( -CC++ のデマングルにも役立ちます):

$ objdump -TC libz.so

libz.so:     file format elf64-x86-64

DYNAMIC SYMBOL TABLE:
0000000000002010 l    d  .init  0000000000000000              .init
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 free
0000000000000000      DF *UND*  0000000000000000  GLIBC_2.2.5 __errno_location
0000000000000000  w   D  *UND*  0000000000000000              _ITM_deregisterTMCloneTable

または以下を使用しますreadelf:

$ readelf -Ws libz.so
Symbol table '.dynsym' contains 112 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND
     1: 0000000000002010     0 SECTION LOCAL  DEFAULT   10
     2: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND free@GLIBC_2.2.5 (14)
     3: 0000000000000000     0 FUNC    GLOBAL DEFAULT  UND __errno_location@GLIBC_2.2.5 (14)
     4: 0000000000000000     0 NOTYPE  WEAK   DEFAULT  UND _ITM_deregisterTMCloneTable

おすすめ記事