2009-07-31 13 views
71

Quiero saber la diferencia exacta entre el archivo dll y exe.Diferencia entre .dll y .exe?

+1

se debe añadir un poco de contexto aquí: Es usted un principiante ¿Está buscando una cierta clase de especificación técnica profunda de las cosas PE O algo más – khebbie

+0

Es cierto que soy un principiante. Es una pregunta de entrevista como etiquetada. –

+0

Creo que todas las respuestas fueron buenas e informativas. Comprobaré esto para siempre, gracias. –

Respuesta

58

EXE:

  1. Es un archivo ejecutable
  2. Al cargar un archivo ejecutable, no se llama a exportar, sino solo al punto de entrada del módulo.
  3. Cuando un sistema inicia un nuevo ejecutable, se crea un nuevo proceso
  4. El subproceso de entrada se invoca en el contexto del subproceso principal de ese proceso.

DLL:

  1. Es una biblioteca de enlace dinámico
  2. Hay varios símbolos exportados.
  3. El sistema carga una DLL en el contexto de un proceso existente.

para más detalles: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1 http://wiki.answers.com/Q/What_is_the_difference_between_an_EXE_and_a_DLL

Referencia: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx

+7

En realidad, solo hay un punto de entrada en una DLL si es una DLL no administrada. La pregunta no era IMO .NET específico. – Aamir

+9

El sistema carga un archivo DLL en un PROCESO existente, no en el hilo. Cada DLL en un proceso puede recibir una notificación cuando un subproceso se inicia o se detiene a través de una función 'LibMain'. –

+11

Tus puntos 1 y 2 no son 100% correctos. Dado que puede usar LoadLibraryEx en un exe o dll, significa que puede usar GetProcAddress para cargar un punto de entrada de un exe o dll. En este sentido, tanto los archivos exe como dll se pueden vincular dinámicamente y pueden tener cualquier cantidad de puntos de entrada. – jussij

1

Un exe es un programa ejecutable mientras que un archivo DLL es un archivo que los programas pueden cargar y ejecutar dinámicamente.

+0

¿Por qué alguien dio negativo? Le agradecería si supiera el motivo y, de lo contrario, ¿qué sentido tiene votar abajo? –

+4

Alguien probablemente sintió que tu respuesta no fue lo suficientemente detallada. – JesperE

+0

sí, es posible que las personas no sepan qué es un programa ejecutable, y eso se convierte en una pregunta completamente nueva. – Mindless

2

Un EXE es visible para el sistema como un ejecutable de Win32 normal. Su entrada punto se refiere a un pequeño cargador que inicializa el tiempo de ejecución .NET y le dice que cargue y ejecute el ensamblado contenido en el EXE. Una DLL es visible para el sistema como una DLL de Win32, pero muy probablemente sin puntos de entrada. El tiempo de ejecución de .NET almacena información sobre el ensamblaje contenido en su propio encabezado.

DLL es una colección de reutilizables funciones donde como un .exe es un ejecutable que puede llamar a estos funciones

+0

El tiempo de ejecución de .NET no tiene nada que ver con .exe o .dll, son archivos de código de máquina binarios (si se producen en algún lenguaje de programación que utiliza el tiempo de ejecución .NET, entonces el tiempo de ejecución .NET está involucrado, pero eso ya es responsabilidad de el código exe en sí mismo, no el cargador de sistema operativo). – Ped7g

-1

La principal diferencia exacta entre DLL y EXE DLL que no tiene un punto de entrada y EXE hace. Si está familiarizado con C++, puede ver que la construcción EXE tiene función de entrada main() y DLL no :)

+0

No lo creo. Mira aquí http://msdn.microsoft.com/en-us/library/ms682596(VS.85).aspx – Aamir

100

No sé por qué todos responden esta pregunta en el contexto de .NET. La pregunta era general y no mencionaba a .NET en ninguna parte.

Bueno, las principales diferencias son:

EXE

  1. un EXE siempre se ejecuta en su propio espacio de direcciones es decir, es un proceso separado.
  2. El objetivo de un EXE es iniciar una aplicación independiente.

DLL

  1. un DLL siempre necesita un host para ejecutar exe. es decir, nunca se puede ejecutar en su propio espacio de direcciones.
  2. El propósito de una DLL es tener una colección de métodos/clases que se puedan volver a utilizar desde otra aplicación.
  3. DLL es la implementación de Microsoft de una biblioteca compartida.

El formato de archivo de DLL y exe es esencialmente el mismo. Windows reconoce la diferencia entre DLL y EXE a través del encabezado PE en el archivo. Para detalles de PE Encabezado, You can have a look at this Article on MSDN

+3

Entonces, si quisieras coudl cambiar el nombre y editar el encabezado del fikle para convertir un dll en un exe y ¿viceversa? – RCIX

+0

@RCIX: ¿Dudo que sea posible? – VoodooChild

+0

Lo más probable es que no sea posible; consulte [la respuesta de kichik] (http://stackoverflow.com/a/4266184/119527) a continuación. –

16

Esta respuesta fue un poco más detallada de lo que pensaba, pero léala.

DLL:
En la mayoría de los casos, un archivo DLL es una biblioteca . Hay un par de tipos de bibliotecas, dinámicas y estáticas: read about the difference. DLL significa dynamic link library que nos dice que es parte del programa pero no todo el asunto. Está hecho de componentes de software reutilizables (library) que puede usar para más que un solo programa. Tenga en cuenta que siempre es posible usar el código fuente de la biblioteca en muchas aplicaciones usando copiar y pegar, pero la idea de una biblioteca DLL/estática es que pueda actualizar el código de una biblioteca y al mismo tiempo actualizar todas las aplicaciones usando sin compilar

Por ejemplo:
Imagínese que usted está creando un Windows GUI component como un botón . En la mayoría de los casos, querrá volver a utilizar el código que ha escrito porque es un componente complejo común - Desea que muchas aplicaciones lo utilicen pero no quiere darles el código fuente. Puede ' t copie y pegue el código del botón en cada programa, por lo que decide que desea crear un DL-Library (DLL).

Este "botón" biblioteca es requerido por EXE cutables para correr, y sin ella no se ejecutará porque no saben cómo crear el botón, sólo la forma de hablar con él.

Del mismo modo, no se puede ejecutar una DLL: ejecutar, porque es solo una parte del programa pero no tiene la información necesaria para crear un "process".

EXE:
Un ejecutable es el programa. Sabe cómo crear un process y cómo hablar con el DLL. Es necesita la DLL para crear un botón, y sin él la aplicación no se ejecuta - ERROR.

Espero que esto ayude ....

+0

En el.NET world, cuando está importando cosas de otros módulos, como por ejemplo, en C# 'using SomeClassFromALibrary', ¿esa biblioteca está vinculada al proyecto a través de una DLL? Estoy tratando de ver si entiendo bien – Abdul

20

La diferencia es que un EXE tiene un punto de entrada, un método "principal" que se ejecutará en la ejecución.

El código dentro de una DLL necesita ser llamado desde otra aplicación.

+5

¡Respuesta simple ...! – pvaju896

+7

Esto está mal, implica que las DLL no tienen puntos de entrada. Las DLL pueden tener un punto de entrada DLLMain que se llama cuando (entre otras cosas) la DLL se carga en el proceso –

1

The .exe es el programa. El .dll es una biblioteca a la que un .exe (u otro .dll) puede llamar.

Lo que sakthivignesh dice puede ser cierto en el sentido de que un .exe puede usar otro como si fuera una biblioteca, y esto se hace (por ejemplo) con algunos componentes COM. En este caso, el .exe "esclavo" es un programa separado (estrictamente hablando, un proceso separado, tal vez ejecutándose en una máquina separada), pero que acepta y maneja solicitudes de otros programas/componentes/lo que sea.

Sin embargo, si elige un archivo .exe y .dll aleatorio desde una carpeta en sus Archivos de programa, es probable que COM no sea relevante: son solo un programa y sus bibliotecas vinculadas dinámicamente.

Utilizando las API de Win32, un programa puede cargar y usar una DLL utilizando las funciones API LoadLibrary y GetProcAddress, IIRC. Hubo funciones similares en Win16.

COM es en muchos sentidos una evolución de la idea de la DLL, concebida originalmente como la base para OLE2, mientras que .NET es el descendiente de COM. Las DLL han existido desde Windows 1, IIRC. Originalmente, eran una forma de compartir el código binario (particularmente las API del sistema) entre varios programas en ejecución para minimizar el uso de la memoria.

20

Existen algunas diferencias más con respecto a la estructura que podría mencionar.

  1. Ambos DLL y EXE comparten la misma estructura de archivos: Portable Executable, o PE. Para diferenciar entre los dos, uno puede mirar en el miembro Characteristics de IMAGE_FILE_HEADER dentro de IMAGE_NT_HEADERS. Para una DLL, tiene el indicador IMAGE_FILE_DLL (0x2000) encendido. Para un EXE es el indicador IMAGE_FILE_EXECUTABLE_IMAGE (0x2).
  2. Los archivos PE constan de algunos encabezados y varias secciones. Por lo general, hay una sección para el código, una sección para los datos, una sección que enumera las funciones importadas y una sección de recursos. Algunas secciones pueden contener más de una cosa. El encabezado también describe una lista de directorios de datos que se encuentran en las secciones. Esos directorios de datos son lo que permite a Windows encontrar lo que necesita en el PE. Pero un tipo de directorio de datos que un EXE nunca tendrá (a menos que esté construyendo un EXE de frankenstein) es el directorio de exportación. Aquí es donde los archivos DLL tienen una lista de funciones que exportan y pueden ser utilizados por otros archivos EXE o DLL. Por otro lado, cada archivo DLL y EXE tiene un directorio de importación donde enumera las funciones y los archivos DLL que requiere para ejecutar.
  3. También en los encabezados PE (IMAGE_OPTIONAL_HEADER) es el miembro ImageBase. Especifica la dirección virtual en la que el PE supone que se cargará. Si se carga en otra dirección, algunos punteros podrían señalar la memoria incorrecta. Como los archivos EXE se encuentran entre los primeros en ser cargados en su nuevo espacio de direcciones, el cargador de Windows puede asegurar una dirección de carga constante y generalmente es 0x00400000. Ese lujo no existe para una DLL. Dos archivos DLL cargados en el mismo proceso pueden solicitar la misma dirección. Esta es la razón por la que un archivo DLL tiene otro directorio de datos llamado Base Reubicación Directorio que generalmente reside en su propia sección: .reloc. Este directorio contiene una lista de lugares en el archivo DLL que necesitan ser actualizados/parcheados para que apunten a la memoria correcta. La mayoría de los archivos EXE no tienen este directorio, pero algunos compiladores antiguos sí los generan.

Puede leer más sobre este tema @MSDN.

3

Dos cosas: la extensión y el indicador de encabezado almacenados en el archivo.

Ambos archivos son PE. Ambos contienen exactamente el mismo diseño. Una DLL es una biblioteca y, por lo tanto, no se puede ejecutar. Si intenta ejecutarlo, obtendrá un error sobre el punto de entrada faltante. Un EXE es un programa que se puede ejecutar. Tiene un punto de entrada. Una bandera dentro del encabezado PE indica qué tipo de archivo es (irrelevante de la extensión del archivo). El encabezado PE tiene un campo donde reside el punto de entrada del programa. En DLL no se usa (o al menos no como un punto de entrada).

Una pequeña diferencia es que en la mayoría de los casos DLLs tiene una sección de exportación donde se exportan los símbolos. Los EXE nunca deben tener una sección de exportación ya que no son bibliotecas, pero nada impide que eso suceda. El cargador Win32 no le importa de ninguna manera.

Aparte de eso, son idénticos. Entonces, en resumen, los EXE son programas ejecutables mientras que los DLL son bibliotecas cargadas en un proceso y contienen algún tipo de funcionalidad útil como seguridad, acceso a la base de datos o algo así.

+2

+1: Muy pocas personas se dan cuenta de que, técnicamente, la diferencia es solo un bit en el encabezado PE –

10

Tanto DLL y EXE son Portable Executable(PE) Formats

A Dynamic-link library (DLL) es una biblioteca y por lo tanto no se puede ejecutar directamente. Si intenta ejecutarlo, obtendrá un error acerca de un punto de entrada faltante. Necesita un punto de entrada (función principal) para ser ejecutado, ese punto de entrada puede ser cualquier aplicación o exe. La vinculación de DLL ocurre en tiempo de ejecución. Es por eso que se llama biblioteca "Dynamic Link".

Un Executable (EXE) es un programa que se puede ejecutar. Tiene su propio punto de entrada. Una bandera dentro del encabezado PE indica qué tipo de archivo es (irrelevante de la extensión del archivo). El encabezado PE tiene un campo donde reside el punto de entrada del programa. En DLL no se usa (o al menos no como un punto de entrada).

Hay muchos software disponibles para verificar la información del encabezado. La única diferencia que hace que ambos funcionen de manera diferente es el bit en el encabezado como se muestra en el diagrama a continuación.

header

archivo EXE sólo tiene una sola entrada principal significa que es aplicación aislada, cuando un sistema lanza exe, un nuevo proceso es creado mientras DLL tienen muchos puntos de entrada de modo que cuando la aplicación lo utilizan ningún nuevo proceso iniciado, DLL puede ser reutilizado y versionado. DLL reduce el espacio de almacenamiento ya que diferentes programas pueden usar el mismo dll. archivo DLL

+1

Usted dice "Una bandera dentro del encabezado PE se indica qué tipo de archivo es (irrelevante de la extensión de archivo) "--- ¿Eso quiere decir que si la extensión es' .exe' o '.dll' no importa? Es esa bandera en el encabezado que realmente los distingue ... Entonces, si hago un 'exe' y lo llamo a través de la interacción de la GUI como' .dll', pero luego lo cambio manualmente, ¿sigue siendo ejecutable? – Abdul

2

DLL v/s Exe

1) es una librería de enlace dinámico que se puede utilizar en los archivos ejecutables y otros archivos dll .
El archivo EXE es un archivo ejecutable que se ejecuta en un proceso separado que es administrado por el sistema operativo.

2) Las DLL no son ejecutables directamente. Son archivos separados que contienen funciones a las que los programas y otras DLL pueden llamar para realizar cálculos y funciones.
Un EXE es un programa que se puede ejecutar. Ejemplo: programa de Windows

3) Reusability
DLL: Se pueden reutilizar para otras aplicaciones.Siempre que el codificador conozca los nombres y parámetros de las funciones y procedimientos en el archivo DLL.
EXE: Solo para fines específicos.

4) Una DLL compartiría el mismo proceso y espacio de memoria de la aplicación de llamada, mientras que un EXE
crea su propio espacio de memoria y proceso.

5) Usa
DLL: Quiere muchas aplicaciones para usar pero no quiere darles el código fuente No puede copiar y pegar el código para el botón en cada programa, por lo que usted decide desea crear una biblioteca de DL (DLL).

EXE: Cuando trabajamos con plantillas de proyecto como aplicaciones de Windows Forms, aplicaciones de consola, aplicaciones WPF y servicios de Windows, generan un ensamblado de exe cuando se compilan.

6) Semejanzas:
Tanto DLL como EXE son archivos binarios que tienen una estructura anidada compleja definida por el formato de Portable Executable, y no están destinados a ser editados por los usuarios.

-1

● .exe y dll son la versión compilada del código C# que también se denominan ensamblajes .

● .exe es un archivo ejecutable independiente, lo que significa que puede ejecutarse directamente.

● .dll es un componente reutilizable que no se puede ejecutar directamente y requiere otros programas para ejecutarlo.

Cuestiones relacionadas