Como visualizo a lista de funções que uma biblioteca compartilhada do Linux está exportando?

Respostas:

307

O que você precisa é nme sua -Dopção:

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

Os símbolos exportados são indicados por a T. Os símbolos necessários que devem ser carregados de outros objetos compartilhados possuem a U. Observe que a tabela de símbolos não inclui apenas funções, mas também variáveis ​​exportadas.

Consulte a nm página do manual para mais informações.

thkala
fonte
18
Ou se você quiser ver apenas símbolos exportados, adicione o sinalizador "--defined-only". por exemplo: "nm -D --defined-only /lib/libtest.so"
Shervin Emami
3
No Mac OS X, basta usar nmsem a -Dbandeira.
precisa saber é o seguinte
42

objdump -T *.so também pode fazer o trabalho

user2391685
fonte
8

Em um MAC, você precisa usar nm *.o | c++filt, pois não há -Copção no nm.

Vincent Fenet
fonte
1

Entre outras ferramentas já mencionadas, você também pode usar readelf( manual ). É semelhante, objdumpmas entra mais em detalhes. Veja isto para a explicação da diferença.

$ 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
fonte
Como devo encontrar símbolos exportados usando readelf? Isso me dá uma quantidade impressionante de produção.
Juraj Martinka