1. ホーム
  2. c++

[解決済み] .soファイル内のシンボルを一覧表示する方法

2022-03-18 14:01:25

質問

.soファイルからエクスポートされるシンボルを一覧表示するにはどうすればよいですか? 可能であれば、そのソースも知りたいです(例えば、スタティック・ライブラリから引き込まれている場合)。

私はgcc 4.0.2を使っています。

解決方法は?

シンボルをリストアップするための標準的なツールは nm というように、簡単に使うことができます。

nm -gD yourLib.so

C++ライブラリのシンボルを表示したい場合は、シンボルを分離する "-C" オプションを追加してください(分離した方がはるかに読みやすくなります)。

nm -gDC yourLib.so

.soファイルがelf形式である場合、2つの選択肢があります。

どちらか objdump ( -C はC++のデマングリングにも有効です)。

$ 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