Wie kann ich die Liste der Funktionen anzeigen, die eine gemeinsam genutzte Linux-Bibliothek exportiert?


Antworten:


307

Was Sie brauchen, ist nmund seine -DOption:

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

Exportierte Sumbole sind mit a gekennzeichnet T. Erforderliche Symbole, die von anderen freigegebenen Objekten geladen werden müssen, haben a U. Beachten Sie, dass die Symboltabelle nicht nur Funktionen enthält, sondern auch exportierte Variablen.

Weitere Informationen finden Sie auf der nm Handbuchseite .


18
Wenn Sie nur exportierte Symbole anzeigen möchten, fügen Sie das Flag "--defined-only" hinzu. zB: "nm -D --defined-only /lib/libtest.so"
— Shervin Emami

3
Unter Mac OS X nur nmohne -DFlag verwenden.
— JPaget


8

Auf einem MAC müssen Sie verwenden nm *.o | c++filt, da es in keine -COption gibt nm.


1

Neben anderen bereits erwähnten Werkzeugen können Sie auch readelf( manuell ) verwenden. Es ist ähnlich, objdumpgeht aber detaillierter. Siehe dies für die Erklärung der Unterschiede.

$ 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)

Wie soll ich exportierte Symbole finden, indem ich readelf verwende? Es gibt mir eine überwältigende Menge an Ausgabe.
— Juraj Martinka
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.