Comment afficher la liste des fonctions qu'une bibliothèque partagée Linux exporte?

Réponses:

315

Ce dont vous avez besoin est nmet son -Doption:

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

Les sumbols exportés sont indiqués par un T. Les symboles requis qui doivent être chargés à partir d'autres objets partagés ont unU . Notez que la table des symboles n'inclut pas uniquement des fonctions, mais également des variables exportées.

Consultez la nm page de manuel pour plus d'informations.

Thkala
la source
18
Ou si vous ne voulez voir que les symboles exportés, ajoutez l'indicateur "--defined-only". par exemple: "nm -D --defined-only /lib/libtest.so"
Shervin Emami
3
Sur Mac OS X, utilisez simplement nmsans le -Ddrapeau.
JPaget
44

objdump -T *.so peut aussi faire le travail

user2391685
la source
8

Sur un MAC, vous devez utiliser nm *.o | c++filt, car il n'y a pas d' -Coption dans nm.

Vincent Fenet
la source
2

Parmi les autres outils déjà mentionnés, vous pouvez également utiliser readelf( manuel ). Il est similaire à objdumpmais va plus dans les détails. Voir ceci pour l'explication de la différence.

$ 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
la source
Comment suis-je censé trouver des symboles exportés en utilisant readelf? Cela me donne une quantité écrasante de rendement.
Juraj Martinka le