DLL
Dynamic-Link Library
Última actualización
Dynamic-Link Library
Última actualización
Tanto el tipo de archivo .exe como el .dll se consideran formatos ejecutables portátiles (PE), pero existen diferencias entre ambos. En esta entrada, se explica la diferencia entre los dos tipos de archivo.
Las DLL son bibliotecas compartidas que contienen funciones ejecutables o datos que pueden ser utilizados por múltiples aplicaciones simultáneamente. Se utilizan para exportar funciones que pueden ser utilizadas por un proceso. A diferencia de los archivos EXE, los archivos DLL no pueden ejecutar código por sí mismos. En cambio, las bibliotecas DLL necesitan ser invocadas por otros programas para ejecutar el código. Como se mencionó anteriormente, la función CreateFileW se exporta desde kernel32.dll, por lo tanto, si un proceso desea llamar a esa función, primero debe cargar kernel32.dll en su espacio de direcciones.
Algunas DLL se cargan automáticamente en cada proceso de manera predeterminada, ya que estas DLL exportan funciones que son necesarias para que el proceso se ejecute correctamente. Algunos ejemplos de estas DLL son ntdll.dll, kernel32.dll y kernelbase.dll. La imagen a continuación muestra varias DLL que están actualmente cargadas por el proceso explorer.exe.
El sistema operativo Windows utiliza una dirección base de DLL para todo el sistema para cargar algunas DLL en la misma dirección base en el espacio de direcciones virtual de todos los procesos de una máquina determinada para optimizar el uso de la memoria y mejorar el rendimiento del sistema. La siguiente imagen muestra kernel32.dll siendo cargado en la misma dirección (0x7fff9fad0000) entre múltiples procesos en ejecución.
Hay varias razones por las que las DLL se utilizan muy a menudo en Windows:
Modularización del código - En lugar de tener un ejecutable masivo que contenga toda la funcionalidad, el código se divide en varias bibliotecas independientes y cada biblioteca se centra en una funcionalidad específica. La modularización facilita el trabajo de los desarrolladores durante el desarrollo y la depuración.
Reutilización del Código - Las DLLs promueven la reutilización del código ya que una librería puede ser invocada por múltiples procesos.
Uso eficiente de la memoria - Cuando varios procesos necesitan la misma DLL, pueden ahorrar memoria compartiendo esa DLL en lugar de cargarla en la memoria del proceso.
Las DLL pueden especificar opcionalmente una función de punto de entrada que ejecuta código cuando ocurre una tarea específica, como cuando un proceso carga la biblioteca DLL. Existen 4 posibilidades para que se llame al punto de entrada:
DLL_PROCESS_ATTACHED: Un proceso está cargando la DLL.
DLL_THREAD_ATTACHED: Un proceso está creando un nuevo hilo.
DLL_THREAD_DETACH: Un hilo sale de manera normal.
DLL_PROCESS_DETACH: Un proceso descarga la DLL.