Jak wyświetlić listę funkcji eksportowanych przez bibliotekę współdzieloną Linux?

Odpowiedzi:

313

Potrzebujesz tego nmi jego -Dopcji:

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

Wyeksportowane sumboli są oznaczone symbolem T. Wymagane symbole, które muszą zostać załadowane z innych wspólnych obiektów, mają znak U. Zauważ, że tablica symboli zawiera nie tylko funkcje, ale także eksportowane zmienne.

Więcej informacji znajduje się na nm stronie podręcznika .

thkala
źródło
18
Lub jeśli chcesz zobaczyć tylko wyeksportowane symbole, dodaj flagę „--defined-only”. np .: „nm -D - tylko zdefiniowane /lib/libtest.so”
Shervin Emami
3
W systemie Mac OS X używaj tylko nmbez -Dflagi.
JPaget
43

objdump -T *.so może również wykonać pracę

użytkownik2391685
źródło
8

Na MAC musisz użyć nm *.o | c++filt, ponieważ nie ma -Copcji w nm.

Vincent Fenet
źródło
1

Wśród innych już wspomnianych narzędzi można również użyć readelf( ręczny ). Jest podobny, objdumpale bardziej szczegółowy. Zobacz to dla wyjaśnienia różnicy.

$ 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
źródło
Jak mam znaleźć wyeksportowane symbole za pomocą readelf? Daje mi to ogromną moc wyjściową.
Juraj Martinka