¿Qué es el formato de archivo DLL?
Los archivos con la extensión .dll contienen bibliotecas de enlace dinámico compartidas dentro de Microsoft Windows. El formato .dll utiliza la misma estructura binaria que los archivos .exe - el formato Portable Executable (PE), identificado por los magic bytes MZ en el desplazamiento 0 y una firma PE\0\0 señalada por el encabezado DOS stub - pero a diferencia de un ejecutable, un .dll no puede iniciarse directamente; debe ser cargado por un proceso anfitrión.
Todos los datos en un .dll pueden cargarse en memoria y ser utilizados por varios programas simultáneamente. Las bibliotecas suelen contener controles ActiveX, complementos del panel de control, controladores de dispositivos o recursos de iconos y fuentes - aunque los archivos que cumplen estas últimas funciones a menudo llevan extensiones diferentes como .ocx para componentes COM o .sys para controladores en modo kernel. También se utilizan como componentes modulares de aplicaciones más grandes, ofreciendo funciones específicas como complementos.
Las bibliotecas pueden contener:
- Código para subprogramas, funciones y complementos
- Datos, incluyendo gráficos y tablas de cadenas
- Recursos asociados como menús, diálogos e información de versión
La especificación del formato .dll es la misma que la de los archivos .exe - ambos utilizan el contenedor PE (o PE32+ en Windows de 64 bits) - sin embargo, la biblioteca no constituye un programa independiente. Dentro del programa que realiza la llamada, la referencia a una biblioteca y su carga pueden realizarse tan tarde como cuando sea necesario (carga diferida). El modelo .dll admite una arquitectura de aplicación modular, fomenta la reutilización de fragmentos de código y reduce tanto el uso de memoria como el espacio en disco. Los archivos .dll administrados compilados para .NET llevan un encabezado CLR junto con la estructura PE estándar, que contiene código de bytes MSIL en lugar de código de máquina nativo.
Seguridad y protección
RIESGO: HIGHLos DLL son código ejecutable y el malware los aprovecha: los DLL maliciosos se ejecutan dentro de procesos legítimos (secuestro de DLL/sideloading - plantar un DLL malicioso donde una aplicación busca primero), y los sitios de descarga de «reparadores de DLL» son un canal clásico de malware y estafas. Reglas: nunca descargue archivos DLL individuales de sitios de terceros; solucione los errores de falta de DLL reinstalando la aplicación, instalando el Visual C++ Redistributable / DirectX runtime oficial, o ejecutando sfc /scannow; verifique la firma digital de los DLL desconocidos (Propiedades → Firmas digitales) y escanéelos en VirusTotal. Eliminar DLL aleatorios de System32 daña Windows.
Detalles del formato
en pocas palabrasProgramas que abren archivos DLL
Detalles técnicos
especificación profunda| Formato binario | PE (Portable Executable) en Windows de 32 bits; PE32+ en Windows de 64 bits - misma estructura de contenedor que .exe |
| Magic bytes | 4D 5A («MZ») en el desplazamiento 0; «PE\0\0» (50 45 00 00) en el desplazamiento almacenado en el campo e_lfanew del DOS stub (0x3C) |
| Flag de identificación de DLL | El bit IMAGE_FILE_DLL (0x2000) en el campo COFF Characteristics distingue un DLL de un EXE dentro del mismo contenedor PE |
| Tipo MIME | application/vnd.microsoft.portable-executable |
| Mecanismo de exportación | La Export Directory Table enumera las funciones por nombre y/o número ordinal; los llamadores resuelven las direcciones en tiempo de ejecución a través de la Export Address Table (EAT) |
| Mecanismo de importación | La Import Directory Table declara los DLL requeridos y los nombres de funciones u ordinales; el cargador de Windows parchea la Import Address Table (IAT) en el momento de la carga |
| Modos de enlace | Enlace implícito (en tiempo de carga) a través de un stub .lib de importación, o enlace explícito (en tiempo de ejecución) a través de LoadLibrary() y GetProcAddress() |
| ASLR y reubicación | La sección .reloc contiene una tabla de reubicación base; el ASLR de Windows aleatoriza la dirección de carga real en tiempo de ejecución, anulando el ImageBase preferido en el encabezado opcional de PE |
| Secciones comunes | .text (código ejecutable), .data (datos inicializados), .rdata (datos de solo lectura e importaciones), .rsrc (recursos), .reloc (reubicaciones base) |
| Recursos incrustados | La sección .rsrc almacena recursos tipados - RT_ICON, RT_DIALOG, RT_STRING, RT_VERSION, RT_MANIFEST - visibles y editables con herramientas como Resource Hacker |
| Compilaciones de arquitectura | Cada CPU de destino (x86, x64, ARM, ARM64) requiere un binario DLL independiente; no hay soporte para binarios universales a diferencia de dylib en macOS |
| DLL de .NET administrados | Los DLL compilados por CLR incrustan un IMAGE_COR20_HEADER que apunta a código de bytes MSIL/CIL en lugar de código de máquina nativo; descompilables con ILSpy o dotPeek |
| Ensamblados Side-by-side | WinSxS de Windows XP+ permite que coexistan varias versiones del mismo DLL en una máquina, gobernadas por archivos de manifiesto de aplicación |
| Punto de entrada | Función DllMain() opcional llamada por el cargador en cuatro eventos: DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_DETACH |
| Carga diferida | La opción del enlazador /DELAYLOAD pospone la carga del DLL hasta la primera llamada a una de sus funciones exportadas, reduciendo el tiempo de inicio del proceso |
| Lanzado | 1985 (Windows 1.0, NE format); current PE format since Windows NT 3.1, 1993 |
| Estándar abierto | Sí · libre de regalías |
| Especificación | learn.microsoft.com |