Frage Unterschied zwischen .dll und .exe?


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


74
2017-07-31 06:03


Ursprung


Antworten:


EXE:

  1. Es ist eine ausführbare Datei
  2. Beim Laden einer ausführbaren Datei wird kein Export, sondern nur der Moduleintrittspunkt aufgerufen.
  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.

Für mehr Details: 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

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


60
2017-07-31 06:09



Ich weiß nicht, warum alle diese Frage im Zusammenhang mit .NET beantworten. Die Frage war allgemein gehalten und erwähnte .NET nirgends.

Nun, die Hauptunterschiede sind:

EXE

  1. Eine Exe läuft immer in ihrem eigenen Adreßraum, d.h. Es ist ein separater Prozeß.
  2. Der Zweck einer EXE ist es, eine separate Anwendung zu starten.

DLL

  1. Eine DLL benötigt immer eine Host-Exe zum Ausführen. h. 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 wiederverwendet werden können.
  3. DLL ist Microsofts Implementierung einer gemeinsam genutzten Bibliothek.

Das Dateiformat von DLL und exe ist im Wesentlichen gleich. Windows erkennt den Unterschied zwischen DLL und EXE durch PE Header in der Datei. Für Details zu PE Header, Sie können sich diesen Artikel auf MSDN ansehen


106
2017-07-31 06:41



Der Unterschied besteht darin, dass eine EXE einen Einstiegspunkt hat, eine "Haupt" -Methode, die bei der Ausführung ausgeführt wird.

Der Code innerhalb einer DLL muss von einer anderen Anwendung aufgerufen werden.


24
2017-09-29 15:08



Es gibt ein paar mehr Unterschiede bezüglich der Struktur, die Sie erwähnen könnten.

  1. DLL und EXE teilen sich die gleiche Dateistruktur - Portable Executable oder PE. Um zwischen den beiden zu unterscheiden, kann man in der Characteristics Mitglied von IMAGE_FILE_HEADER Innerhalb IMAGE_NT_HEADERS. Für eine DLL hat es die IMAGE_FILE_DLL (0x2000) -Flag eingeschaltet. Für eine EXE ist es die IMAGE_FILE_EXECUTABLE_IMAGE (0x2) Flagge.
  2. PE-Dateien bestehen aus einigen Headern und einer Anzahl von Abschnitten. In der Regel gibt es einen Abschnitt für Code, einen Abschnitt für Daten, einen Abschnitt mit importierten Funktionen 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 zu finden, was es in der PE benötigt. Aber ein Typ von Datenverzeichnis, das eine EXE niemals haben wird (es sei denn, Sie erstellen eine frankenstein-EXE), ist das Exportverzeichnis. Dies ist, wo DLL-Dateien eine Liste von Funktionen haben, die sie exportieren und von anderen EXE- oder DLL-Dateien verwendet werden können. Auf der anderen Seite verfügt jede DLL und EXE über ein Importverzeichnis, in dem die zum Ausführen erforderlichen Funktionen und DLL-Dateien aufgeführt sind.
  3. Auch in den PE-Kopfstücken (IMAGE_OPTIONAL_HEADER) ist der ImageBase Mitglied. Es gibt die virtuelle Adresse an, bei der das PE annimmt, dass es geladen wird. Wenn es an einer anderen Adresse geladen wird, könnten einige Zeiger auf den falschen Speicher verweisen. Da EXE-Dateien zu den ersten gehören, die in ihren neuen Adressraum geladen werden, kann der Windows-Loader eine konstante Ladeadresse sicherstellen, und das ist normalerweise 0x00400000. Dieser Luxus existiert für eine DLL nicht. Zwei DLL-Dateien, die in denselben Prozess geladen werden, können die gleiche Adresse anfordern. Aus diesem Grund verfügt eine DLL über ein anderes Datenverzeichnis mit dem Namen "Base Relocation Directory", das sich normalerweise in einer eigenen Sektion befindet. .reloc. Dieses Verzeichnis enthält eine Liste von Stellen in der DLL, die rebasiert / gepatcht werden müssen, damit sie auf den richtigen Speicher verweisen. Die meisten EXE-Dateien haben dieses Verzeichnis nicht, aber einige alte Compiler erzeugen sie.

Sie können mehr zu diesem Thema lesen @ MSDN.


22
2017-11-24 11:21



Diese Antwort war ein wenig detaillierter als ich dachte, aber lies es durch.

DLL:
In den meisten Fällen ist eine DLL-Datei ein Bibliothek. Es gibt ein paar Arten von Bibliotheken, dynamische und statische - Lesen Sie über den Unterschied. DLL steht für dynamische Verbindung Bibliothek was uns sagt, dass es ein Teil des Programms aber nicht das ganze Ding. Es besteht aus wiederverwendbaren Softwarekomponenten (Bibliothek) für die Sie verwenden könnten mehr als ein einzelnes Programm. Denken Sie daran, dass es immer möglich ist, den Quellcode der Bibliothek in vielen Anwendungen mit Copy-Paste zu verwenden, aber die Idee einer DLL / Static Library besteht darin, den Code einer Bibliothek zu aktualisieren und gleichzeitig alle Anwendungen zu aktualisieren es - ohne zu kompilieren.

Beispielsweise:
Stellen Sie sich vor, Sie erstellen ein Windows GUI-Komponente wie ein Taste. In den meisten Fällen möchten Sie den Code, den Sie geschrieben haben, wiederverwenden, da er komplex ist, aber a verbreitet Komponente - Sie möchten, dass viele Anwendungen sie verwenden, aber Sie ihnen den Quellcode nicht geben möchten Sie können den Code für die Schaltfläche nicht in jedem Programm kopieren und einfügen, daher möchten Sie einen erstellen DL-Bibliothek (DLL).

Dies "Taste" Bibliothek wird benötigt von EXECutables zu laufen, und ohne sie werden sie nicht laufen, weil sie nicht wissen, wie man die Taste erstellt, nur wie man damit spricht.

Ebenso kann eine DLL nicht ausgeführt werden - ausführen, weil sie nur ein Teil des Programms ist, aber nicht über die Informationen verfügt, die zum Erstellen eines benötigt werden "verarbeiten".

EXE:
Eine ausführbare Datei ist das Programm. Es weiß, wie man ein verarbeiten und wie man mit der DLL spricht. Es braucht die DLL, um eine Schaltfläche zu erstellen, und ohne sie wird die Anwendung nicht ausgeführt - Fehler.

hoffe das hilft....


16
2017-07-31 07:04



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

EIN Dynamic-Link-Bibliothek (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 irgendeine Anwendung oder exe sein. DLL-Bindung tritt zur Laufzeit auf. Deshalb heißt es "Dynamic Link" -Bibliothek.

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

Da sind viele Software verfügbar, um Kopfinformationen zu prüfen. Der einzige Unterschied, der dazu führt, dass beide anders funktionieren, ist das Bit in der Kopfzeile, wie im folgenden Diagramm gezeigt.

header

EXE-Datei hat nur einzelne Haupteintrag bedeutet, dass es isoliert Anwendung ist, wenn ein System startet exe, ein neuer Prozess erstellt wird, während DLLs viele Einstiegspunkte haben, so wenn Anwendung verwendet es keinen neuen Prozess gestartet, DLL kann wiederverwendet und versioniert werden. DLL reduziert Speicherplatz, da verschiedene Programme dieselbe DLL verwenden können.


11
2018-01-10 11:24



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

Beide Dateien sind PE-Dateien. Beide enthalten das exakt 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 innerhalb des PE-Headers gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header besitzt 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 in den meisten Fällen DLLs haben einen Exportbereich, in dem Symbole exportiert werden. EXEs sollten niemals einen Export-Bereich haben, da sie keine Bibliotheken sind, aber nichts verhindert, dass dies passiert. Der Win32-Lader ist egal.

Ansonsten sind sie identisch. Zusammenfassend gesagt, EXEs sind ausführbare Programme, während DLLs Bibliotheken sind, die in einen Prozess geladen werden und eine Art nützlicher Funktionalität wie Sicherheit, Datenbankzugriff oder etwas enthalten.


3
2017-08-25 02:55



Dll v / s Exe

1) DLL-Datei ist eine dynamische Link-Bibliothek, die in EXE-Dateien und verwendet werden kann andere DLL-Dateien.
  EXE-Datei ist eine ausführbare Datei, die in einem separaten ausgeführt wird Prozess, der von OS verwaltet wird.

2) DLLs sind nicht direkt ausführbar. Sie sind separate Dateien, die Funktionen enthalten, 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 eine andere Anwendung wiederverwendet werden. Solange der Coder die Namen und Parameter der Funktionen und Prozeduren in der DLL-Datei kennt.
EXE: Nur für bestimmte Zwecke.

4) Eine DLL würde den gleichen Prozess und Speicherplatz der aufrufenden Anwendung teilen, während ein
 EXE erstellt seinen separaten Prozess- und Speicherbereich.

5) Verwendet
DLL: Sie möchten, dass viele Anwendungen es verwenden, aber Sie möchten ihnen nicht den Quellcode geben Sie können nicht den Code für die Schaltfläche in jedem Programm kopieren, also entscheiden Sie, dass Sie eine DL-Bibliothek (DLL ).

EXE: Wenn wir mit Projektvorlagen wie Windows Forms-Anwendungen, Konsolenanwendungen, WPF-Anwendungen und Windows-Diensten arbeiten, generieren sie beim Kompilieren eine EXE-Assembly.

6) Ähnlichkeiten:
Sowohl DLL als auch EXE sind Binärdateien mit einer komplexen geschachtelten Struktur, die durch das Format "Portable Executable" definiert wird, und sie sind nicht dazu bestimmt, von Benutzern bearbeitet zu werden.


3
2017-09-11 12:05



Eine EXE ist für das System als reguläre Win32-Programmdatei sichtbar. Sein Eintritt Point verweist auf einen kleinen Loader, der die .NET-Laufzeit initialisiert und meldet Es lädt und führt die in der EXE enthaltene Assembly aus. Eine DLL ist für das System als Win32-DLL sichtbar, aber höchstwahrscheinlich ohne Einstiegspunkte. Die .NET-Runtime speichert Informationen über die enthaltenen Assembly in einem eigenen Header.

DLL ist eine Sammlung von wiederverwendbaren   Funktionen wo als .exe ist ein   ausführbare Datei, die diese aufrufen kann   Funktionen


2
2017-07-31 06:06



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

Was sakthivignesh sagt, kann in der Hinsicht wahr sein, dass .exe ein anderes verwenden kann, als wäre es eine Bibliothek, und dies geschieht (zum Beispiel) mit einigen COM-Komponenten. In diesem Fall ist der "Slave" .exe ein separates Programm (streng genommen ein separater Prozess - der vielleicht auf einer separaten Maschine läuft), aber einer, der Anfragen von anderen Programmen / Komponenten / was auch immer annimmt und verarbeitet.

Wenn Sie jedoch nur eine zufällige EXE- und DLL-Datei aus einem Ordner in Ihren Programmdateien auswählen, ist die Wahrscheinlichkeit groß, dass COM nicht relevant ist - sie sind nur ein Programm und seine dynamisch verknüpften Bibliotheken.

Unter Verwendung von Win32-APIs kann ein Programm eine DLL mithilfe der API-Funktionen LoadLibrary und GetProcAddress (IIRC) laden und verwenden. Es gab ähnliche Funktionen in Win16.

COM ist in vielerlei Hinsicht eine Evolution der DLL-Idee, die ursprünglich als Basis für OLE2 konzipiert wurde, während .NET der Nachkomme von COM ist. DLLs gibt es seit Windows 1, IIRC. Sie waren ursprünglich eine Möglichkeit, Binärcode (insbesondere System-APIs) zwischen mehreren laufenden Programmen zu teilen, um die Speichernutzung zu minimieren.


1
2017-09-29 15:25