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.


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


8

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


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)

Comment suis-je censé trouver des symboles exportés en utilisant readelf? Cela me donne une quantité écrasante de rendement.
Juraj Martinka le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.