Eu tenho um objeto compartilhado (dll). Como descubro o que todos os símbolos são exportados?
linux
shared-libraries
chappar
fonte
fonte
Respostas:
Você tem um "objeto compartilhado" (geralmente uma biblioteca compartilhada no AIX), uma biblioteca compartilhada UNIX ou uma DLL do Windows? Todas essas são coisas diferentes, e sua pergunta confunde todas elas :-(
dump -Tv /path/to/foo.o
.readelf -Ws /path/to/libfoo.so
ou (se você tiver GNU nm)nm -D /path/to/libfoo.so
.dumpbin /EXPORTS foo.dll
.fonte
nm
também funciona no MacOSX, exceto a-D
opção Oubrew install binutils
use a versão GNU viagnm
. Para o GNUnm
,--demangle
também é útil. Tambémgobjdump
.linux
então acho que é seguro dizer que @chappar tem uma biblioteca compartilhada do Linux.O objdump é outro bom no linux.
fonte
Se for um arquivo DLL do Windows e seu sistema operacional for Linux, use o winedump :
fonte
Em * nix, verifique nm. No Windows, use o programa Dependency Walker
fonte
nm --defined-only -g something.so
imprimirá os símbolos definidos na biblioteca e símbolos externos, o que provavelmente é o que o OP deseja.veja homem nm
fonte
Usar:
nm --demangle <libname>.so
fonte
nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols
.readelf
ou-D
bandeira funciona.A maneira de plataforma cruzada (não apenas a plataforma cruzada em si, mas também trabalhando, no mínimo, com ambos
*.so
e*.dll
) está usando o radare da estrutura de engenharia reversa2 . Por exemplo:Como bônus,
rabin2
reconhece a manipulação de nomes C ++, por exemplo (e também com o.so
arquivo) :Também funciona com arquivos de objetos:
fonte
Você pode usar o gnu objdump.
objdump -p your.dll
. Em seguida, selecione o.edata
conteúdo da seção e você encontrará as funções exportadas em[Ordinal/Name Pointer] Table
.fonte
Normalmente, você também teria um arquivo de cabeçalho incluído no seu código para acessar os símbolos.
fonte