Cómo ver el contenido de la biblioteca de Windows (* .lib)

181

Tengo un archivo binario: biblioteca estática de Windows (* .lib).
¿Hay una manera simple de encontrar nombres de las funciones y su interfaz de esa biblioteca?

¿Algo similar emfary elfdumputilidades (en sistemas Linux)?

Nick Borodulin
fuente
1
Nota: El símbolo del sistema específico de .NET viene con las ediciones de Visual Studio pero no con la edición Express. De: social.msdn.microsoft.com/Forums/en-US/…
isgoed

Respuestas:

199

Suponiendo que está hablando de una biblioteca estática, DUMPBIN /SYMBOLSmuestra las funciones y los objetos de datos en la biblioteca. Si está hablando de una biblioteca de importación (una .libutilizada para referirse a símbolos exportados desde una DLL), entonces quiere DUMPBIN /EXPORTS.

Tenga en cuenta que para las funciones vinculadas con la interfaz binaria "C", esto aún no le dará valores de retorno, parámetros o convenciones de llamada. Esa información no está codificada en .libabsoluto; debe saberlo con anticipación (a través de prototipos en los archivos de encabezado, por ejemplo) para poder llamarlos correctamente.

Para las funciones vinculadas con la interfaz binaria C ++, la convención de llamada y los argumentos se codifican en el nombre exportado de la función (también llamada "cambio de nombre"). DUMPBIN /SYMBOLSle mostrará tanto el nombre de la función "destrozada" como el conjunto de parámetros decodificados.

Tim Lesher
fuente
66
Tanto / SYMBOLS como / EXPORTS no funcionan hoy en día. Tengo que usar / ALL con una tubería más para ver todas las funciones en el archivo .lib.
user5280911
100

Abra una consola de comando visual (símbolo del sistema de Visual Studio)

dumpbin /ARCHIVEMEMBERS openssl.x86.lib

o

lib /LIST openssl.x86.lib

o simplemente ábralo con 7-zip :) es un archivo AR

Tanguy
fuente
19
Genial truco con 7-zip parece que hay dos archivos .txt allí, ¿qué significan?
Damian
21

Quería una herramienta como ar t libfile.aen Unix.
El equivalente de Windows es lib.exe /list libfile.lib.

lgwest
fuente
44
Sí, lib (solo) mostrará los archivos obj; no mostrará las funciones y los datos en los archivos obj.
user34660
14

"dumpbin -exports" funciona para dll, pero a veces puede no funcionar para lib. Para lib podemos usar "dumpbin -linkermember" o simplemente "dumpbin -linkermember: 1".

Franco
fuente
3

1) Abra un símbolo del sistema de desarrollador para VS 2017 (o cualquier versión que tenga en su máquina) (debe ubicarse en: Menú Inicio -> Todos los programas -> Visual Studio 2017 (o cualquier versión que tenga en su máquina) -> Visual Studio Tools -> Símbolo del sistema del desarrollador para VS 2017.

2) Ingrese el siguiente comando:

dumpbin /EXPORTS my_lib_name.lib

usuario3292568
fuente
2

Como se puede ver en otras respuestas, tendrá que abrir un Símbolo del sistema para desarrolladores que se ofrece en su versión de Visual Studio para tener dumpbin.exeen su ruta de ejecución. De lo contrario, puede establecer las variables de entorno necesarias a mano.

dumpbin /EXPORTS yourlibrary.libgeneralmente mostrará solo una pequeña lista de símbolos. En muchos casos, no mostrará las funciones que exporta la biblioteca.

dumpbin /SYMBOLS /EXPORTS yourlibrary.libmostrará esos símbolos, pero también una increíble cantidad enorme de otros símbolos. Por lo tanto, debe filtrarlos, posiblemente con una tubería para findstr(si desea una herramienta de MS-Windows), o grep.

Buscar la Staticpalabra clave usando una de estas herramientas parece ser una buena pista.

Hilton Fernandes
fuente