¿Cómo veo la lista de funciones que exporta una biblioteca compartida de Linux?

Respuestas:

314

Lo que necesita es nmy su -Dopción:

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

Los símbolos exportados se indican con a T. Los símbolos obligatorios que deben cargarse desde otros objetos compartidos tienen un U. Tenga en cuenta que la tabla de símbolos no incluye solo funciones, sino también variables exportadas.

Vea la nm página del manual para más información.

thkala
fuente
18
O si solo desea ver los símbolos exportados, agregue el indicador "--defined-only". por ejemplo: "nm -D --defined-only /lib/libtest.so"
Shervin Emami
3
En Mac OS X solo use nmsin la -Dbandera.
JPaget
43

objdump -T *.so también puede hacer el trabajo

usuario2391685
fuente
8

En un MAC, debe usarlo nm *.o | c++filt, ya que no hay ninguna -Copción nm.

Vincent Fenet
fuente
1

Entre otras herramientas ya mencionadas, puede usar también readelf( manual ). Es similar objdumppero va más en detalle. Vea esto para la explicación de la diferencia.

$ 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)
Martin Flaska
fuente
¿Cómo se supone que debo encontrar los símbolos exportados usando readelf? Me da una cantidad abrumadora de salida.
Juraj Martinka