如何查看Linux共享库正在导出的功能列表?


Answers:


309

您需要的是nm它的-D选择:

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

导出的sumbol用表示T。必须从其他共享库加载的必需符号有一个U。请注意,符号表不仅包括函数,还包括导出的变量。

有关更多信息,请参见nm 手册页


18
或者,如果您只想查看导出的符号,请添加“ --defined-only”标志。例如:“ nm -D --defined-only /lib/libtest.so”
Shervin Emami

3
在Mac OS X上,只需nm不带-D标志就可以使用。
JPaget



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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.