Convertir EXE a DLL
Compila una DLL utilizable a partir del código fuente o de código .NET recuperable; cambiar el nombre de un EXE no es una conversión.
Convierte archivos EXE en línea
Todavía no tenemos un conversor en línea específico para EXE a DLL, pero puedes convertir archivos EXE en línea a estos formatos:
Cómo convertir un archivo exe a dll
- Otro
- Aún sin calificaciones.
Una aplicación host de Windows o un SDK de dispositivo puede aceptar únicamente una DLL cuando necesita código reutilizable en lugar de un programa independiente. Por lo tanto, convertir un EXE existente normalmente significa extraer o reconstruir una funcionalidad seleccionada como biblioteca, no cambiar la extensión del nombre de archivo.
Qué es el formato EXE
Un EXE es un archivo Windows Portable Executable destinado a iniciar una aplicación. Puede contener código máquina nativo o código .NET administrado, un punto de entrada como main, WinMain o un método de inicio de .NET, metadatos de la aplicación, recursos y referencias a otras bibliotecas.
Visual Studio, GCC, Clang, Delphi y las herramientas de .NET SDK producen archivos EXE. Se utilizan para aplicaciones de escritorio, utilidades de línea de comandos, instaladores, servicios y aplicaciones .NET autocontenidas.
Qué es el formato DLL
Una DLL también es un archivo Windows Portable Executable, pero está diseñada para ser cargada por un proceso host. Una DLL nativa normalmente expone funciones exportadas, componentes COM u otros puntos de entrada definidos por ABI; una DLL administrada es un ensamblado .NET que contiene clases, métodos, recursos y metadatos a los que otro programa .NET puede hacer referencia.
Las DLL permiten que varias aplicaciones compartan código y que un host cargue funcionalidad opcional durante el tiempo de ejecución. El host debe conocer la API de la biblioteca, las convenciones de llamada, el framework de destino y las dependencias. Una DLL no es automáticamente una versión reutilizable de la aplicación que produjo un EXE.
Cuando el código fuente está disponible
- Cree un proyecto Class Library independiente en Visual Studio, o cree el proyecto Dynamic-Link Library adecuado para código nativo C o C++. Use el mismo framework y la misma arquitectura de CPU que la aplicación.
- Mueva las clases, los recursos y el código de implementación reutilizables al proyecto de biblioteca. Mantenga el proyecto ejecutable si todavía necesita una interfaz de usuario, procesamiento de línea de comandos, configuración o
static void Main(). - Haga que las clases y los métodos administrados previstos sean
public. Para C o C++ nativo, defina una API exportada estable con__declspec(dllexport)o un archivo de definición de módulo, y documente la convención de llamada y los tipos de datos. - Compile con Build → Build Solution. Visual Studio coloca la salida en un directorio del proyecto como
bin\Debugobin\Release, según la configuración.
Para una biblioteca .NET nueva, los comandos equivalentes son:
dotnet new classlib -n MyLibrary
dotnet build MyLibraryLa compilación crea una DLL, pero solo el código incluido en el proyecto de biblioteca está disponible a través de su API; el comportamiento completo del EXE no se transfiere automáticamente.
Cuando solo está disponible un EXE de .NET
Los archivos EXE y DLL administrados de .NET utilizan el mismo formato general de ensamblado, por lo que las herramientas a menudo pueden inspeccionar y reconstruir su código. Cuando la licencia y la legislación aplicable lo permitan, abra el EXE con ILSpy o dnSpyEx, inspeccione sus espacios de nombres y dependencias, y use la función File → Save Code de ILSpy para exportar el código C# reconstruido.
Cree un nuevo proyecto Class Library, importe el código recuperado, restaure las referencias, corrija los modificadores de acceso y las rutas de recursos, y después compile y pruebe la DLL. No se garantiza que la salida descompilada coincida con el código fuente original: la ofuscación, las transformaciones del compilador, los símbolos faltantes, las dependencias nativas y el código generado pueden impedir una reconstrucción limpia.
En ocasiones se puede hacer referencia a un EXE administrado existente como ensamblado, pero eso no elimina su punto de entrada ejecutable ni convierte el diseño de su aplicación en una API de biblioteca. Una DLL de dependencia referenciada que se encuentre junto al EXE también es una biblioteca existente, no una conversión del EXE.
Cuando solo está disponible un EXE nativo
No existe una conversión fiable con un solo clic para un EXE nativo de C, C++, Delphi o similar. Ghidra, IDA y Binary Ninja pueden desensamblar y analizar código máquina, pero no restauran el código fuente original ni producen automáticamente una DLL mantenible con exportaciones documentadas.
Reimplemente el comportamiento necesario a partir del código fuente, la documentación o los resultados de ingeniería inversa y, después, compile la implementación como una DLL. Crear un proyecto DLL a partir del mismo código fuente nativo puede ayudar, pero las funciones, el estado global, la inicialización, la gestión de recursos y las exportaciones todavía requieren cambios en el código.
Limitaciones de compatibilidad
Cambiar el nombre de program.exe a program.dll no lo convierte. El archivo renombrado conserva sus características ejecutables y normalmente carece de las exportaciones o los tipos de biblioteca administrados que espera un host.
En el caso de las bibliotecas nativas, el host y la DLL deben utilizar arquitecturas de CPU compatibles: un proceso de 64 bits no puede cargar una DLL nativa de 32 bits, y un proceso de 32 bits no puede cargar una DLL nativa de 64 bits. Haga coincidir la ABI del compilador, las convenciones de llamada, el diseño de las estructuras, la codificación de caracteres, las bibliotecas de tiempo de ejecución, los nombres exportados y las versiones de las DLL dependientes. Una DLL cargada en un proceso también comparte el espacio de direcciones de ese proceso, por lo que la inicialización y la propiedad de la memoria requieren cuidado.
En el caso de las bibliotecas .NET, haga coincidir el framework de destino, la versión del runtime, las dependencias específicas del procesador, los requisitos de nombre seguro y las versiones de los paquetes. Una biblioteca compilada para un runtime más reciente o incompatible puede fallar antes de que se llame a cualquier método.
La reconstrucción puede cambiar el estado global, el orden de inicio, la búsqueda de configuración, las suposiciones sobre el directorio de trabajo, el comportamiento de la interfaz de usuario y las rutas de recursos. Pruebe la DLL mediante la aplicación host o el SDK exactos que la cargarán.
Convertidores en línea
Los convertidores de archivos en línea de buena reputación son útiles para cambios de formato, como imágenes o documentos, pero no para convertir ejecutables arbitrarios de Windows en DLL funcionales. Un servidor no puede inferir de forma fiable las exportaciones previstas de un programa nativo ni la interfaz de biblioteca a partir de su binario, y cargar archivos propietarios o ejecutables crea riesgos de confidencialidad y de análisis en busca de malware. Utilice una cadena de herramientas de desarrollo local o herramientas locales de ingeniería inversa.
Simplemente, es imposible convertir EXE a DLL directamente.
Por lo tanto, no existe un convertidor de exe a dll o un convertidor en línea gratuito de .exe a .dll.
EXE vs DLL: comparación de formatos
Cómo se comparan los formatos EXE y DLL en las propiedades que más importan para esta conversión.
| Propiedad | .EXE Portable Executable | .DLL Dynamic-Link Library |
|---|---|---|
| Estándar abierto | No | No |
| Compresión | Sin compresión | Sin compresión |
| Tamaño de archivo típico | Grande | Medio |
| Se abre en un navegador web | No | No |
| Edición posterior | No editable directamente | No editable directamente |
| Compatibilidad con metadata | Amplio | Básico |
| Legible como texto plano | No | No |
| Más adecuado para | Incrustación en aplicaciones | Incrustación en aplicaciones |
| Introducido | 1993 | 1993 |
| Desarrollador | Microsoft | Microsoft |