Come posso visualizzare l'elenco delle funzioni che sta esportando una libreria condivisa Linux?


Risposte:


314

Ciò di cui hai bisogno è nme la sua -Dopzione:

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

I sumbols esportati sono indicati da a T. I simboli richiesti che devono essere caricati da altri oggetti condivisi hanno a U. Si noti che la tabella dei simboli non include solo le funzioni, ma anche le variabili esportate.

Vedere la nm pagina del manuale per ulteriori informazioni.


18
Oppure, se vuoi vedere solo i simboli esportati, aggiungi il flag "--defined-only". ad esempio: "nm -D --defined-only /lib/libtest.so"
Shervin Emami

3
Su Mac OS X basta usare nmsenza il -Dflag.
JPaget,


8

Su un MAC, è necessario utilizzare nm *.o | c++filt, poiché non è disponibile alcuna -Copzione nm.


1

Tra gli altri strumenti già menzionati puoi usare anche readelf( manuale ). È simile objdumpma va più in dettaglio. Vedi questo per la spiegazione della differenza.

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

Come posso trovare i simboli esportati usando readelf? Mi dà una quantità enorme di output.
Juraj Martinka,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.