¿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.


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


8

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


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)

¿Cómo se supone que debo encontrar los símbolos exportados usando readelf? Me da una cantidad abrumadora de salida.
Juraj Martinka
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.