J'ai un objet partagé (dll). Comment savoir quels symboles sont exportés à partir de cela?
linux
shared-libraries
chappar
la source
la source
Réponses:
Avez-vous un "objet partagé" (généralement une bibliothèque partagée sous AIX), une bibliothèque partagée UNIX ou une DLL Windows? Ce sont toutes des choses différentes, et votre question les confond toutes :-(
dump -Tv /path/to/foo.o
.readelf -Ws /path/to/libfoo.so
, ou (si vous avez GNU nm)nm -D /path/to/libfoo.so
.dumpbin /EXPORTS foo.dll
.la source
nm
fonctionne également sur MacOSX, sauf l'-D
option. Oubrew install binutils
et utilisez la version GNU viagnm
. Pour GNUnm
,--demangle
est également utile. Aussigobjdump
.linux
donc je pense qu'il est prudent de dire que @chappar a une bibliothèque partagée Linux.objdump est un autre bon sur Linux.
la source
S'il s'agit d'un fichier DLL Windows et que votre système d'exploitation est Linux, utilisez winedump :
la source
Sur * nix check nm. Sous Windows, utilisez le programme Dependency Walker
la source
nm --defined-only -g something.so
imprimera les symboles qui sont à la fois définis dans la bibliothèque et les symboles externes, ce qui est probablement ce que souhaite l'OP.voir man nm
la source
Utilisation:
nm --demangle <libname>.so
la source
nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols
.readelf
ou le-D
drapeau fonctionne.La méthode multiplateforme (non seulement multiplateforme elle-même, mais fonctionnant également, à tout le moins, avec les deux
*.so
et*.dll
) utilise le cadre de rétro-ingénierie radare2 . Par exemple:En prime,
rabin2
reconnaît la modification des noms C ++, par exemple (et aussi avec.so
fichier) :Fonctionne également avec les fichiers objets:
la source
Vous pouvez utiliser gnu objdump.
objdump -p your.dll
. Ensuite.edata
, passez au contenu de la section et vous trouverez les fonctions exportées sous[Ordinal/Name Pointer] Table
.la source
Habituellement, vous avez également un fichier d'en-tête que vous incluez dans votre code pour accéder aux symboles.
la source