Tengo un objeto compartido (dll). ¿Cómo puedo saber de qué se exportan todos los símbolos?
linux
shared-libraries
chappar
fuente
fuente
Respuestas:
¿Tiene un "objeto compartido" (generalmente una biblioteca compartida en AIX), una biblioteca compartida UNIX o una DLL de Windows? Todas estas son cosas diferentes, y su pregunta las combina todas :-(
dump -Tv /path/to/foo.o
.readelf -Ws /path/to/libfoo.so
, o (si tiene GNU nm)nm -D /path/to/libfoo.so
.dumpbin /EXPORTS foo.dll
.fuente
nm
También funciona en MacOSX, excepto la-D
opción. Obrew install binutils
y use la versión GNU a través degnm
. Para GNUnm
,--demangle
también es útil. Tambiéngobjdump
.linux
así que creo que es seguro decir que @chappar tiene una biblioteca compartida de Linux.objdump es otro buen en Linux.
fuente
Si es un archivo DLL de Windows y su sistema operativo es Linux, utilice winedump :
fuente
En * nix verifique nm. En Windows use el programa Dependency Walker
fuente
nm --defined-only -g something.so
imprimirá los símbolos que están definidos en la biblioteca y los símbolos externos, que es probablemente lo que quiere el OP.ver hombre nm
fuente
Utilizar:
nm --demangle <libname>.so
fuente
nm: /usr/lib/i386-linux-gnu/libtemplates_parser.so.11.6: no symbols
.readelf
o la-D
bandera funciona.El modo multiplataforma (no solo multiplataforma en sí, sino que también funciona, como mínimo, con ambos
*.so
y*.dll
) está utilizando el marco de ingeniería inversa radare2 . P.ej:Como
rabin2
beneficio adicional, reconoce el cambio de nombre de C ++, por ejemplo (y también con el.so
archivo) :Funciona también con archivos de objetos:
fuente
Puedes usar gnu objdump.
objdump -p your.dll
. Luego desplácese al.edata
contenido de la sección y encontrará las funciones exportadas en[Ordinal/Name Pointer] Table
.fuente
Por lo general, también tendrá un archivo de encabezado que incluya en su código para acceder a los símbolos.
fuente