Risposte:
Ciò di cui hai bisogno è nm
e la sua -D
opzione:
$ 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.
nm
senza il -D
flag.
objdump -T *.so
può anche fare il lavoro
Su un MAC, è necessario utilizzare nm *.o | c++filt
, poiché non è disponibile alcuna -C
opzione nm
.
Tra gli altri strumenti già menzionati puoi usare anche readelf
( manuale ). È simile objdump
ma 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)