wake-up-neo.com

Unterschied zwischen .dll und .exe?

Ich möchte den genauen Unterschied zwischen der DLL- und Exe-Datei wissen.

80
Umesh Aawte

EXE:

  1. Es ist eine ausführbare Datei
  2. Beim Laden einer ausführbaren Datei wird kein Export aufgerufen, sondern nur der Eintrittspunkt des Moduls.
  3. Wenn ein System eine neue ausführbare Datei startet, wird ein neuer Prozess erstellt
  4. Der Eintragsthread wird im Kontext des Hauptthreads dieses Prozesses aufgerufen.

DLL:

  1. Es ist eine Dynamic Link Library
  2. Es gibt mehrere exportierte Symbole.
  3. Das System lädt eine DLL in den Kontext eines vorhandenen Prozesses.

Weitere Informationen: http://www.c-sharpcorner.com/Interviews/Answer/Answers.aspxQuestionId=1431&MajorCategoryId=1&MinorCategoryId=1http://wiki.answers.com/Q/ Was_ist_die_differenz_zwischen_an_EXE_und_a_DLL

Referenz: http://www.dotnetspider.com/forum/34260-Was-Unterschied-zwischen-dll-exe.aspx

62
firstthumb

Ich weiß nicht, warum jeder diese Frage im Kontext von .NET beantwortet. Die Frage war allgemein und erwähnte nirgends .NET. 

Nun, die Hauptunterschiede sind:

EXE

  1. Ein Exe läuft immer in seinem eigenen Adressraum, d. H. Es ist ein separater Prozess.
  2. Der Zweck einer EXE-Datei ist das Starten einer separaten eigenen Anwendung.

DLL

  1. Eine DLL benötigt immer ein Host-Exe. es kann niemals in seinem eigenen Adressraum laufen.
  2. Der Zweck einer DLL besteht darin, eine Sammlung von Methoden/Klassen zu haben, die von einer anderen Anwendung wieder verwendet werden können.
  3. DLL ist die Implementierung einer gemeinsam genutzten Bibliothek durch Microsoft.

Das Dateiformat von DLL und exe ist im Wesentlichen dasselbe. Windows erkennt den Unterschied zwischen DLL und EXE über PE Header in der Datei. Einzelheiten zum PE-Header finden Sie unter Sie können sich diesen Artikel auf MSDN ansehen

114
Aamir

Der Unterschied ist, dass eine EXE einen Einstiegspunkt hat, eine "Hauptmethode", die bei der Ausführung ausgeführt wird.

Der Code in einer DLL muss von einer anderen Anwendung aus aufgerufen werden.

26
Robin Day

Es gibt noch einige Unterschiede bezüglich der Struktur, die Sie erwähnen könnten.

  1. Sowohl DLL als auch EXE haben dieselbe Dateistruktur - Portable Executable oder PE. Um zwischen den beiden zu unterscheiden, kann man im Characteristics-Member von IMAGE_FILE_HEADER in IMAGE_NT_HEADERS nachsehen. Für eine DLL ist das Flag IMAGE_FILE_DLL (0x2000) aktiviert. Für eine EXE-Datei ist dies das Flag IMAGE_FILE_EXECUTABLE_IMAGE (0x2).
  2. PE-Dateien bestehen aus einigen Kopfzeilen und einigen Abschnitten. Normalerweise gibt es einen Abschnitt für Code, einen Abschnitt für Daten, einen Abschnitt, in dem importierte Funktionen aufgeführt sind, und einen Abschnitt für Ressourcen. Einige Abschnitte können mehr als eine Sache enthalten. Der Header beschreibt auch eine Liste von Datenverzeichnissen, die sich in den Abschnitten befinden. Diese Datenverzeichnisse ermöglichen es Windows, herauszufinden, was im PE erforderlich ist. Eine Art von Datenverzeichnis, das eine EXE-Datei niemals haben wird (sofern Sie keine frankenstein-EXE-Datei erstellen), ist das Exportverzeichnis. Hier haben DLL -Dateien eine Liste von Funktionen, die sie exportieren, und die von anderen EXE- oder DLL -Dateien verwendet werden können. Auf der anderen Seite hat jedes DLL und EXE ein Importverzeichnis, in dem die Funktionen und DLL -Dateien aufgeführt sind, die zum Ausführen erforderlich sind.
  3. Auch in den PE-Headern (IMAGE_OPTIONAL_HEADER) ist das Mitglied ImageBase enthalten. Es gibt die virtuelle Adresse an, unter der das PE annimmt, dass es geladen wird. Wenn es an einer anderen Adresse geladen wird, zeigen einige Zeiger möglicherweise auf den falschen Speicher. Da EXE-Dateien zu den ersten gehören, die in ihren neuen Adressraum geladen werden, kann der Windows-Loader eine konstante Ladeadresse sicherstellen. Dies ist normalerweise 0x00400000. Für eine DLL gibt es diesen Luxus nicht. Zwei DLL -Dateien, die in denselben Prozess geladen werden, können dieselbe Adresse anfordern. Aus diesem Grund hat eine DLL ein anderes Datenverzeichnis mit dem Namen Base Relocation Directory, das sich normalerweise in einem eigenen Abschnitt befindet - .reloc. Dieses Verzeichnis enthält eine Liste von Stellen in der DLL, die neu basiert/gepatcht werden müssen, damit sie auf den richtigen Speicher zeigen. Die meisten EXE-Dateien haben dieses Verzeichnis nicht, aber einige alte Compiler generieren sie.

Weitere Informationen zu diesem Thema finden Sie unter @ MSDN .

23
kichik

Diese Antwort war etwas ausführlicher als ich dachte, aber sie durchlesen.

DLL:
In den meisten Fällen handelt es sich bei einer DLL -Datei um eine Bibliothek. Es gibt verschiedene Arten von Bibliotheken, dynamische und statische - lesen Sie den Unterschied . DLL steht für dynamischer Link library , was uns sagt, dass es sich um einen Teil des Programms handelt, aber nicht das Ganze. Es besteht aus wiederverwendbaren Softwarekomponenten ( library ), die Sie für mehr als ein einzelnes Programm verwenden können. Beachten Sie, dass es immer möglich ist, den Bibliotheksquellcode in vielen Anwendungen mithilfe von Kopieren und Einfügen zu verwenden. Die Idee einer DLL/statischen Bibliothek besteht jedoch darin, dass Sie den Code einer Bibliothek aktualisieren und gleichzeitig alle Anwendungen mithilfe von aktualisieren können es - ohne zu kompilieren. 

Zum Beispiel:
Stellen Sie sich vor, Sie erstellen ein Windows-GUI-Komponente wie einen Button. In den meisten Fällen möchten Sie den von Ihnen geschriebenen Code erneut verwenden, da er eine komplexe, aber eine common -Komponente ist Der Code für die Schaltfläche kann nicht in jedes Programm kopiert und eingefügt werden. Sie möchten also ein DL-Library (DLL) erstellen. 

Diese "button" -Bibliothek wird von EXE cutables zum Ausführen benötigt, und ohne sie werden sie nicht ausgeführt, da sie nicht wissen, wie sie die Schaltfläche erstellen, sondern nur, wie sie damit sprechen.

Ebenso kann eine DLL nicht ausgeführt werden - ausführen, da sie nur ein Teil des Programms ist, jedoch nicht über die zum Erstellen eines "process" erforderlichen Informationen verfügt. 

EXE:
.__ Eine ausführbare Datei ist das Programm. Es weiß, wie ein Prozess erstellt wird und wie mit der DLL gesprochen wird. Benötigt die DLL, um eine Schaltfläche zu erstellen, und ohne sie wird die Anwendung nicht ausgeführt - ERROR.

hoffe das hilft....

16
hannson

Sowohl DLL als auch EXE sind Portable Executable (PE) -Formate

Eine Dynamic-Link Library (DLL) ist eine Bibliothek und kann daher nicht direkt ausgeführt werden. Wenn Sie versuchen, es auszuführen, erhalten Sie eine Fehlermeldung über einen fehlenden Einstiegspunkt. Es benötigt einen Einstiegspunkt (Hauptfunktion), um ausgeführt zu werden. Dieser Einstiegspunkt kann eine beliebige Anwendung oder ein Exe sein. Die Bindung von DLL erfolgt zur Laufzeit. Deshalb heißt es "Dynamic Link" -Bibliothek.

Eine Executable (EXE) ist ein Programm, das ausgeführt werden kann. Es hat einen eigenen Einstiegspunkt. Ein Flag im PE-Header zeigt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header hat ein Feld, in dem sich der Einstiegspunkt für das Programm befindet. In DLLs wird es nicht verwendet (oder zumindest nicht als Einstiegspunkt). 

Es stehen viele Software zur Verfügung, um die Kopfinformationen zu überprüfen. Der einzige Unterschied, der bewirkt, dass beide unterschiedlich arbeiten, ist das Bit im Header, wie in der folgenden Abbildung dargestellt.

header

Die EXE-Datei hat nur einen Haupteintrag, dh es handelt sich um eine isolierte Anwendung. Wenn ein System exe startet, wird ein neuer Prozess erstellt, während DLLs viele Einstiegspunkte haben. Wenn also die Anwendung es verwendet, kann kein neuer Prozess gestartet werden. DLL kann erneut verwendet und versioniert werden . DLL reduziert den Speicherplatz, da verschiedene Programme dieselbe DLL verwenden können.

14
Zaheer Ahmed

Dll v/s Exe

1) Die DLL-Datei ist eine dynamische Link-Bibliothek, die in Exe-Dateien und in Anderen DLL-Dateien verwendet werden kann.
Die EXE-Datei ist eine ausführbare Datei, die in einem separaten Prozess ausgeführt wird, der vom Betriebssystem verwaltet wird.

2) DLLs sind nicht direkt ausführbar. Sie sind separate Dateien mit Funktionen, die von Programmen und anderen DLLs aufgerufen werden können, um Berechnungen und Funktionen auszuführen.
Eine EXE ist ein Programm, das ausgeführt werden kann. Bsp .: Windows-Programm

3) Wiederverwendbarkeit
DLL: Sie können für andere Anwendungen wiederverwendet werden. Solange der Codierer die Namen und Parameter der Funktionen und Prozeduren in der Datei DLL kennt.
EXE: Nur für bestimmte Zwecke.

4) Eine DLL teilt sich den gleichen Prozess und Speicherplatz der aufrufenden Anwendung, während eine
EXE erstellt einen separaten Prozess- und Speicherplatz.

5) verwendet
DLL: Sie möchten, dass viele Anwendungen es verwenden, aber Sie möchten ihnen nicht den Quellcode geben. Sie können den Code für die Schaltfläche nicht in jedes Programm kopieren und einfügen. Bibliothek (DLL).

EXE: Wenn wir mit Projektvorlagen wie Windows Forms-Anwendungen, Konsolenanwendungen, WPF-Anwendungen und Windows-Services arbeiten, wird beim Kompilieren eine Exe-Assembly generiert.

6) Ähnlichkeiten:
Sowohl DLL als auch EXE sind binäre Dateien und haben eine komplexe geschachtelte Struktur, die durch das Portable Executable-Format definiert wird. Sie sind nicht für die Bearbeitung durch Benutzer gedacht.

4
skanda93

Zwei Dinge: die Erweiterung und das Header-Flag, die in der Datei gespeichert sind.

Beide Dateien sind PE-Dateien. Beide enthalten genau das gleiche Layout. Eine DLL ist eine Bibliothek und kann daher nicht ausgeführt werden. Wenn Sie versuchen, es auszuführen, erhalten Sie eine Fehlermeldung über einen fehlenden Einstiegspunkt. Eine EXE ist ein Programm, das ausgeführt werden kann. Es hat einen Einstiegspunkt. Ein Flag im PE-Header zeigt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header hat ein Feld, in dem sich der Einstiegspunkt für das Programm befindet. In DLLs wird es nicht verwendet (oder zumindest nicht als Einstiegspunkt). 

Ein kleiner Unterschied ist, dass DLLs in den meisten Fällen einen Exportbereich haben, in den Symbole exportiert werden. EXEs sollten niemals einen Exportbereich haben, da es sich nicht um Bibliotheken handelt, aber nichts hindert das daran. Der Win32-Loader kümmert sich in keiner Weise. 

Abgesehen davon sind sie identisch. Zusammenfassend gesagt, sind EXEs ausführbare Programme, während DLLs Bibliotheken sind, die in einen Prozess geladen werden und einige nützliche Funktionen wie Sicherheit, Datenbankzugriff oder ähnliches enthalten.

3
judy smith

Eine EXE-Datei ist für das System als reguläre ausführbare Win32-Datei sichtbar. Sein Eintrag point bezieht sich auf einen kleinen Loader, der die .NET-Laufzeitumgebung initialisiert undit mitteilt, die in der EXE.__ enthaltene Assembly zu laden und auszuführen. Eine DLL ist für das System als sichtbar Win32 DLL, aber höchstwahrscheinlich ohne Einstiegspunkte. Die .NET-Laufzeitumgebung speichert Informationen über die enthaltene Assembly in einem eigenen Header.

dll ist eine Sammlung von wiederverwendbaren Funktionen, bei denen eine .exe eine .__ ist. ausführbare Datei, die diese aufrufen kann Funktionen

2
rahul

Die .exe ist das Programm. Die DLL ist eine Bibliothek, die eine .exe (oder eine andere DLL) aufrufen kann.

Was Sakthivignesh sagt, kann wahr sein, indem eine .exe eine andere als eine Bibliothek verwenden kann, und dies wird beispielsweise mit einigen COM-Komponenten durchgeführt. In diesem Fall ist die "Slave" .exe-Datei ein separates Programm (genau genommen ein separater Prozess - möglicherweise auf einem separaten Computer ausgeführt), das jedoch Anforderungen anderer Programme/Komponenten/was auch immer akzeptiert und verarbeitet.

Wenn Sie jedoch einfach eine zufällige .exe und .dll-Datei aus einem Ordner in Ihren Programmdateien auswählen, stehen die Chancen, dass COM nicht relevant ist - sie sind nur ein Programm und seine dynamisch verknüpften Bibliotheken.

Mit Win32-APIs kann ein Programm eine DLL mithilfe der IILC-API-Funktionen LoadLibrary und GetProcAddress laden und verwenden. In Win16 gab es ähnliche Funktionen.

COM ist in vielerlei Hinsicht eine Weiterentwicklung der Idee DLL, die ursprünglich als Basis für OLE2 gedacht war, während .NET der Nachkomme von COM ist. DLLs gibt es seit Windows 1, IIRC. Sie waren ursprünglich eine Möglichkeit, binären Code (insbesondere System-APIs) zwischen mehreren laufenden Programmen gemeinsam zu nutzen, um den Speicherbedarf zu minimieren.

1
Steve314

Ein Exe ist ein ausführbares Programm, während A DLL eine Datei ist, die von Programmen dynamisch geladen und ausgeführt werden kann.

0

● .exe und dll sind die kompilierte Version von c # -Code, die auch als Assemblys bezeichnet werden.

● .exe ist eine eigenständige ausführbare Datei, dh sie kann direkt ausgeführt werden.

● .dll ist eine wiederverwendbare Komponente, die nicht direkt ausgeführt werden kann und zur Ausführung durch andere Programme erforderlich ist.

0
Kedarnath M S

Unterschied zwischen DLL und EXE:

1) DLL ist eine In-Process-Komponente, dh sie wird im selben Speicherbereich wie der Client-Prozess ausgeführt. EXE ist eine Out-Process-Komponente, dh, sie wird in einem eigenen Speicherbereich ausgeführt.

2) Die DLL enthält Funktionen und Prozeduren, die andere Programme verwenden können (fördert die Wiederverwendbarkeit), während EXE nicht für andere Programme freigegeben werden kann.

3) DLL kann nicht direkt ausgeführt werden, da sie von anderen Programmen geladen und ausgeführt werden sollen. EXE ist ein Programm, das direkt ausgeführt wird.

0
rahul sharma