Ich habe ein gemeinsames Objekt (DLL). Wie finde ich heraus, welche Symbole daraus exportiert werden?
linux
shared-libraries
Chappar
quelle
quelle
Antworten:
Haben Sie ein "freigegebenes Objekt" (normalerweise eine gemeinsam genutzte Bibliothek unter AIX), eine gemeinsam genutzte UNIX-Bibliothek oder eine Windows-DLL? Dies sind alles verschiedene Dinge, und Ihre Frage bringt sie alle zusammen :-(
dump -Tv /path/to/foo.o
.readelf -Ws /path/to/libfoo.so
Sie für eine gemeinsam genutzte ELF-Bibliothek oder (wenn Sie GNU nm haben)nm -D /path/to/libfoo.so
.dumpbin /EXPORTS foo.dll
.quelle
nm
funktioniert auch unter MacOSX, mit Ausnahme der-D
Option. Oderbrew install binutils
und verwenden Sie die GNU-Version übergnm
. Für GNUnm
,--demangle
ist ebenfalls nützlich. Auchgobjdump
.linux
daher kann man mit Sicherheit sagen, dass @chappar über eine gemeinsam genutzte Linux-Bibliothek verfügt.objdump ist ein weiteres gutes unter Linux.
quelle
Wenn es sich um eine Windows-DLL-Datei handelt und Ihr Betriebssystem Linux ist, verwenden Sie winedump :
quelle
On * nix check nm. Verwenden Sie unter Windows das Programm Dependency Walker
quelle
nm --defined-only -g something.so
werden die Symbole gedruckt, die sowohl in der Bibliothek als auch in externen Symbolen definiert sind. Dies ist wahrscheinlich das, was das OP wünscht.siehe Mann nm
quelle
Verwenden:
nm --demangle <libname>.so
quelle
nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols
.readelf
oder-D
Flagge funktioniert.Der plattformübergreifende Weg (nicht nur plattformübergreifend selbst, sondern zumindest auch mit beiden
*.so
und*.dll
) funktioniert mit dem Reverse-Engineering-Framework radare2 . Z.B:Erkennt als Bonus beispielsweise
rabin2
C ++ - Namensmangel (und auch mit.so
Datei) :Funktioniert auch mit Objektdateien:
quelle
Sie können gnu objdump verwenden.
objdump -p your.dll
. Schwenken Sie dann zum.edata
Abschnittinhalt und Sie finden die exportierten Funktionen unter[Ordinal/Name Pointer] Table
.quelle
Normalerweise haben Sie auch eine Header-Datei, die Sie in Ihren Code aufnehmen, um auf die Symbole zuzugreifen.
quelle