如何列出从.so文件导出的符号?如果可能的话,我也想知道它们的来源(例如,是否从静态库中提取它们)。
我正在使用gcc 4.0.2,如果有区别的话。
最佳答案
列出符号的标准工具是nm
,您可以像这样简单地使用它:
nm -gD yourLib.so
如果您想查看C++库的符号,请添加“-C”选项,以对符号进行解贴(更容易阅读)。
nm -gDC yourLib.so
如果您的.so文件为elf格式,则有两种选择:
要么
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