En el mundo de la programación, especialmente cuando trabajamos con archivos binarios y desarrollos a nivel bajo en Windows, la herramienta Dumpbin es una de las más útiles. Dumpbin es una utilidad proporcionada por Microsoft que permite inspeccionar archivos binarios de manera detallada, incluyendo archivos ejecutables (EXE), bibliotecas de enlaces dinámicos (DLL) y archivos de objetos generados por el compilador. Esta herramienta es parte del conjunto de herramientas del compilador de Visual Studio, y proporciona una gran cantidad de información técnica que resulta indispensable para la depuración y análisis de estos archivos.
Dumpbin es una herramienta de línea de comandos que permite inspeccionar archivos binarios y proporciona información clave sobre el contenido de estos archivos, tales como:
Esta herramienta es especialmente útil para desarrolladores que trabajan con aplicaciones nativas de Windows y necesitan analizar el comportamiento o la estructura interna de un ejecutable o una biblioteca. Además, es útil para entender cómo está vinculado un archivo binario y depurar problemas relacionados con dependencias de bibliotecas.
Para poder utilizar Dumpbin, necesitas tener instalado Visual Studio o, al menos, el conjunto de herramientas de compilación de Visual Studio que incluye Dumpbin.exe. Este archivo se puede encontrar dentro de las herramientas del compilador de Visual Studio, que suelen estar ubicadas en un directorio similar a este:
C:\Program Files (x86)\Microsoft Visual Studio\20XX\Community\VC\Tools\MSVC\XX.XX.XXXXX\bin\Hostx64\x64
O bien, puedes ejecutar Dumpbin directamente desde el símbolo del sistema del desarrollador de Visual Studio, que configura las rutas necesarias para acceder a estas herramientas sin especificar la ruta completa.
1. Abre Visual Studio.
2. Ve al menú de Herramientas y selecciona Símbolo del sistema para desarrolladores o simplemente busca "Developer Command Prompt" en el menú de inicio de Windows.
Una vez abierto, estarás listo para utilizar Dumpbin y otros comandos relacionados con el compilador.
El comando básico para utilizar Dumpbin es el siguiente:
dumpbin [opciones] archivo
Donde archivo
es el archivo binario que deseas analizar, y las opciones
especifican qué tipo de información deseas obtener.
Existen numerosas opciones disponibles en Dumpbin, cada una de las cuales proporciona un tipo de información específico sobre el archivo binario. A continuación, detallamos algunas de las más utilizadas:
Esta opción permite ver información básica sobre el archivo, como el tipo de archivo (EXE, DLL), la arquitectura del procesador (x86, x64), la versión del subsistema y otras propiedades técnicas.
Ejemplo:
dumpbin /headers archivo.exe
El resultado incluirá algo como esto:
Dump of file archivo.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64)
5 number of sections
60AE9A00 time date stamp Tue Jun 06 12:01:20 2023
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
2022 characteristics
La opción /SYMBOLS muestra una lista de símbolos presentes en el archivo, como funciones, variables y otros elementos que pueden ser utilizados por otros archivos.
Ejemplo:
dumpbin /symbols archivo.obj
Este comando resulta especialmente útil cuando se necesita depurar un archivo de objetos y entender qué funciones y variables están disponibles.
Si deseas conocer qué bibliotecas o archivos DLL necesita un archivo para ejecutarse correctamente, la opción /DEPENDENTS es la adecuada.
Ejemplo:
dumpbin /dependents archivo.dll
Esto mostrará una lista de bibliotecas vinculadas dinámicamente que se cargan cuando se ejecuta el archivo.
Dump of file archivo.dll
File Type: DLL
Image has the following dependencies:
KERNEL32.dll
USER32.dll
GDI32.dll
ADVAPI32.dll
Este comando muestra una lista de las funciones que el archivo DLL exporta, es decir, las funciones que pueden ser utilizadas por otros programas o bibliotecas.
Ejemplo:
dumpbin /exports archivo.dll
El resultado incluirá una lista de las funciones exportadas, como:
ordinal hint RVA name
1 0 00001010 Func1
2 1 00001020 Func2
3 2 00001030 Func3
Si deseas ver qué funciones está utilizando tu archivo binario desde otras bibliotecas o DLLs, la opción /IMPORTS te mostrará esa información.
Ejemplo:
dumpbin /imports archivo.exe
Este comando mostrará qué funciones están siendo importadas desde otras bibliotecas en el archivo binario.
Section contains the following imports:
KERNEL32.dll
7C8097F3 ExitProcess
7C809BF5 CreateFileA
7C80A417 ReadFile
Imagina que has creado un ejecutable llamado miPrograma.exe y deseas obtener más información sobre sus dependencias y estructura interna. Podrías ejecutar los siguientes comandos:
1. Para ver la cabecera del archivo:
dumpbin /headers miPrograma.exe
2. Para listar las dependencias de DLL:
dumpbin /dependents miPrograma.exe
3. Para inspeccionar las funciones importadas:
dumpbin /imports miPrograma.exe
Si estás trabajando con una biblioteca dinámica miBiblioteca.dll y necesitas ver qué funciones exporta, puedes utilizar:
dumpbin /exports miBiblioteca.dll
De esta manera, sabrás qué funciones pueden ser utilizadas por otros programas que carguen esa DLL.
Dumpbin es una herramienta poderosa que todo desarrollador de software debe tener en su arsenal, especialmente cuando se trata de proyectos en C++ o cualquier otro lenguaje que genere archivos binarios nativos. Gracias a Dumpbin, puedes analizar archivos ejecutables y bibliotecas con un alto nivel de detalle, facilitando la depuración y optimización de tu código.
Aprender a utilizar Dumpbin y comprender su salida puede ahorrarte horas de trabajo, permitiéndote identificar rápidamente problemas como dependencias faltantes, símbolos no definidos, o arquitecturas incorrectas. Así que no dudes en probar estas opciones y explorarlas en tus propios proyectos.
Jorge García
Fullstack developer