Das System lädt eine DLL in einen vorhandenen PROCESS, nicht in einen Thread. Jede DLL in einem Prozess kann über eine LibMainFunktion eine Benachrichtigung erhalten, wenn ein Thread gestartet oder gestoppt wird .
Daniel Earwicker
13
Ihre Punkte 1 und 2 sind nicht 100% korrekt. Da Sie LoadLibraryEx für eine Exe oder DLL verwenden können, bedeutet dies, dass Sie mit GetProcAddress einen Einstiegspunkt aus einer Exe oder einer DLL laden können. In dieser Hinsicht können sowohl exe- als auch dll-Dateien dynamisch verknüpft werden und eine beliebige Anzahl von Einstiegspunkten aufweisen.
Jussij
130
Ich weiß nicht, warum jeder diese Frage im Kontext von .NET beantwortet. Die Frage war allgemein und erwähnte .NET nirgendwo.
Nun, die Hauptunterschiede sind:
EXE
Eine Exe wird immer in ihrem eigenen Adressraum ausgeführt, dh es handelt sich um einen separaten Prozess.
Der Zweck einer EXE ist es, eine eigene Anwendung zu starten.
DLL
Eine DLL benötigt immer eine Host-Exe, um ausgeführt zu werden. Das heißt, es kann niemals in einem eigenen Adressraum ausgeführt werden.
Der Zweck einer DLL besteht darin, eine Sammlung von Methoden / Klassen zu haben, die von einer anderen Anwendung aus wiederverwendet werden können.
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 den PE-Header in der Datei. Einzelheiten zum PE-Header finden Sie in diesem Artikel zu MSDN
Dies ist eine Fehlladung. Dies bedeutet, dass DLLs keine Einstiegspunkte haben. DLLs können einen DLLMain-Einstiegspunkt haben, der aufgerufen wird, wenn (unter anderem) die DLL in den Prozess geladen wird
jay.lee
28
Es gibt noch einige Unterschiede in Bezug auf die Struktur, die Sie erwähnen könnten.
Sowohl DLL als auch EXE haben dieselbe Dateistruktur - Portable Executable oder PE. Um zwischen den beiden zu unterscheiden, kann man in das CharacteristicsMitglied von IMAGE_FILE_HEADERinnen schauen IMAGE_NT_HEADERS. Für eine DLL ist das IMAGE_FILE_DLLFlag (0x2000) aktiviert. Für eine EXE ist es das IMAGE_FILE_EXECUTABLE_IMAGE(0x2) -Flag.
PE-Dateien bestehen aus einigen Headern und mehreren Abschnitten. Normalerweise 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 der Datenverzeichnisse, die sich in den Abschnitten befinden. Diese Datenverzeichnisse ermöglichen es Windows, im PE zu finden, was es benötigt. Eine Art von Datenverzeichnis, das eine EXE-Datei niemals haben wird (es sei denn, Sie erstellen eine Frankenstein-EXE-Datei), ist das Exportverzeichnis. Hier haben DLL-Dateien eine Liste der Funktionen, die sie exportieren und die 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 Funktionen und DLL-Dateien aufgelistet sind, die zum Ausführen erforderlich sind.
Auch in den PE-Headern ( IMAGE_OPTIONAL_HEADER) befindet sich das ImageBaseMitglied. Es gibt die virtuelle Adresse an, unter der das PE davon ausgeht, dass es geladen wird. Wenn es an einer anderen Adresse geladen wird, können 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 in denselben Prozess geladene DLL-Dateien können dieselbe Adresse anfordern. Aus diesem Grund verfügt eine DLL über ein anderes Datenverzeichnis namens 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 verweisen. Die meisten EXE-Dateien haben dieses Verzeichnis nicht, aber einige alte Compiler generieren sie.
1. Da es sich um Flags handelt, können beide gleichzeitig gesetzt werden. 2. Wie Sie sagten, ist es möglich, aber verschwindend unwahrscheinlich. 3. ASLR wird auch die Exe verschieben, wenn dies möglich ist. Also ja, sogar eine Exe kann Umzüge haben. Alles in allem sind EXEs, die DLLs sind, möglich, aber selten .
Deduplikator
20
Diese Antwort war etwas detaillierter als ich dachte, las sie aber durch.
DLL:
In den meisten Fällen ist eine DLL-Datei eine Bibliothek . Es gibt verschiedene Arten von Bibliotheken, dynamische und statische - lesen Sie über den Unterschied . DLL steht für Dynamic Link Library, die uns sagt, dass es ein Teil des Programms ist, aber nicht das Ganze. Es besteht aus wiederverwendbaren Softwarekomponenten ( Bibliothek ), die Sie für mehr als ein einzelnes Programm verwenden können . Beachten Sie, dass es in vielen Anwendungen immer möglich ist, den Quellcode der Bibliothek mithilfe von Copy-Paste zu verwenden. Die Idee einer DLL / statischen Bibliothek besteht jedoch darin, dass Sie den Code einer Bibliothek aktualisieren und gleichzeitig alle Anwendungen mit aktualisieren können es - ohne zu kompilieren.
Beispiel:
Stellen Sie sich vor, Sie erstellen eine Windows-GUI-Komponente wie eine Schaltfläche . In den meisten Fällen möchten Sie den von Ihnen geschriebenen Code wiederverwenden, da es sich um eine komplexe, aber häufig vorkommende Komponente handelt. Sie möchten, dass viele Anwendungen ihn verwenden, möchten ihnen jedoch nicht den Quellcode geben, den Sie nicht kopieren können - Fügen Sie den Code für die Schaltfläche in jedes Programm ein, damit Sie eine DL-Bibliothek (DLL) erstellen möchten. .
Diese "Button" -Bibliothek wird von EXE benötigt Cutables zum Ausführen benötigt. Ohne sie werden sie nicht ausgeführt, da sie nicht wissen, wie sie die Schaltfläche erstellen, sondern nur, wie sie mit ihr sprechen.
Ebenso kann eine DLL nicht ausgeführt werden, da sie nur ein Teil des Programms ist, aber nicht über die Informationen verfügt, die zum Erstellen eines "Prozesses" erforderlich sind. .
EXE:
Eine ausführbare Datei ist das Programm . Es weiß, wie man einen Prozess erstellt und wie man mit der DLL spricht. Es benötigt die DLL, um eine Schaltfläche zu erstellen, und ohne sie wird die Anwendung nicht ausgeführt - ERROR.
Wenn Sie in der .NET-Entwicklungswelt Dinge aus anderen Modulen importieren, z. B. in C # using SomeClassFromALibrary, wird diese Bibliothek über eine DLL mit dem Projekt verknüpft. Ich versuche nur zu sehen, ob ich richtig verstehe
Eine 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 eine beliebige Anwendung oder Exe sein. Die DLL-Bindung erfolgt zur Laufzeit. Deshalb heißt es "Dynamic Link" -Bibliothek.
Eine ausführbare Datei (EXE) ist ein Programm, das ausgeführt werden kann. Es hat einen eigenen Einstiegspunkt. Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header enthält ein Feld, in dem sich der Einstiegspunkt für das Programm befindet. In DLLs wird es nicht verwendet (oder zumindest nicht als Einstiegspunkt).
Es gibt viele Software zur Überprüfung der Header-Informationen. Der einzige Unterschied, der dazu führt, dass beide unterschiedlich funktionieren, ist das Bit im Header, wie in der folgenden Abbildung gezeigt.
Die EXE-Datei hat nur einen einzigen Haupteintrag. Dies bedeutet, dass es sich um eine isolierte Anwendung handelt. Wenn ein System exe startet, wird ein neuer Prozess erstellt, während DLLs viele Einstiegspunkte haben. Wenn die Anwendung sie verwendet, wird kein neuer Prozess gestartet. Die DLL kann wiederverwendet und versioniert werden. DLL reduziert den Speicherplatz, da verschiedene Programme dieselbe DLL verwenden können.
Sie sagen "Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung)" --- Bedeutet das also, ob die Erweiterung eine Rolle spielt .exeoder .dllnicht? Es ist dieses Flag in der Kopfzeile, das sie wirklich auszeichnet. Wenn ich also ein Flag erstelle exeund es über die GUI-Interaktion .dllbenenne, aber dann dieses Flag manuell ändere, ist es immer noch lauffähig?
Abdul
4
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, wird eine Fehlermeldung über einen fehlenden Einstiegspunkt angezeigt. Eine EXE ist ein Programm, das ausgeführt werden kann. Es hat einen Einstiegspunkt. Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header enthält 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 besteht darin, dass DLLs in den meisten Fällen einen Exportabschnitt haben , in den Symbole exportiert werden. EXEs sollten niemals einen Exportabschnitt haben, da sie keine Bibliotheken sind, aber nichts verhindert dies. Dem Win32-Loader ist das egal.
Ansonsten sind sie identisch. Zusammenfassend sind EXEs ausführbare Programme, während DLLs Bibliotheken sind, die in einen Prozess geladen werden und nützliche Funktionen wie Sicherheit, Datenbankzugriff oder ähnliches enthalten.
+1: So wenige Leute erkennen, dass der Unterschied technisch gesehen nur ein Bit im PE-Header ist
Serge Wautier
Ich frage mich, was in einem Interview passieren würde, wenn Sie so antworten würden. Sie: "Was ist der Unterschied zwischen einer DLL und einer EXE?" Sie: "One Bit".
JMI MADISON
4
Dll v / s Exe
1) Die DLL-Datei ist eine dynamische Linkbibliothek, die in exe-Dateien und 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. Dies 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. Beispiel: Windows-Programm
3) Wiederverwendbarkeits-
DLL: Sie können für eine andere Anwendung wiederverwendet werden. Solange der Codierer die Namen und Parameter der Funktionen und Prozeduren in der DLL-Datei kennt.
EXE: Nur für einen bestimmten Zweck.
4) Eine DLL würde denselben Prozess und Speicherplatz der aufrufenden Anwendung gemeinsam nutzen, während eine
EXE-Datei ihren separaten Prozess- und Speicherbereich erstellt.
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 jedem Programm kopieren und einfügen, also entscheiden Sie, dass Sie eine DL erstellen möchten. Bibliothek (DLL).
EXE: Wenn wir mit Projektvorlagen wie Windows Forms-Anwendungen, Konsolenanwendungen, WPF-Anwendungen und Windows-Diensten arbeiten, wird beim Kompilieren eine Exe-Assembly generiert.
6) Ähnlichkeiten:
Sowohl DLL als auch EXE sind Binärdateien mit einer komplexen verschachtelten Struktur, die durch das Format Portable Executable definiert ist, und sie können nicht von Benutzern bearbeitet werden.
Die .exe ist das Programm. Die DLL ist eine Bibliothek, in die eine EXE-Datei (oder eine andere DLL) aufrufen kann.
Was sakthivignesh sagt, kann darin zutreffen, dass eine .exe eine andere verwenden kann, als wäre es eine Bibliothek, und dies geschieht (zum Beispiel) mit einigen COM-Komponenten. In diesem Fall ist die "Slave" -Exe ein separates Programm (genau genommen ein separater Prozess - möglicherweise auf einem separaten Computer ausgeführt), der jedoch Anforderungen von anderen Programmen / Komponenten / was auch immer akzeptiert und verarbeitet.
Wenn Sie jedoch nur eine zufällige EXE- und DLL-Datei aus einem Ordner in Ihren Programmdateien auswählen, ist COM wahrscheinlich nicht relevant - es handelt sich lediglich um ein Programm und seine dynamisch verknüpften Bibliotheken.
Mithilfe von Win32-APIs kann ein Programm eine DLL mithilfe der LoadLibrary- und GetProcAddress-API-Funktionen IIRC laden und verwenden. In Win16 gab es ähnliche Funktionen.
COM ist in vielerlei Hinsicht eine Weiterentwicklung der DLL-Idee, die ursprünglich als Grundlage 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ärcode (insbesondere System-APIs) zwischen mehreren laufenden Programmen zu teilen, um die Speichernutzung zu minimieren.
Eine EXE-Datei ist für das System als reguläre ausführbare Win32-Datei sichtbar. Der Einstiegspunkt bezieht sich auf einen kleinen Loader, der die .NET-Laufzeit initialisiert und anweist, die in der EXE enthaltene Assembly zu laden und auszuführen. Eine DLL ist für das System als Win32-DLL sichtbar, jedoch höchstwahrscheinlich ohne Einstiegspunkte. Die .NET-Laufzeit speichert Informationen zur enthaltenen Assembly in einem eigenen Header.
DLL ist eine Sammlung wiederverwendbarer Funktionen, wobei eine EXE-Datei eine ausführbare Datei ist, die diese Funktionen aufrufen kann
Die .NET-Laufzeit hat nichts mit .exe oder .dll zu tun, es handelt sich um binäre Maschinencodedateien (Wenn diese in einer Programmiersprache erstellt werden, die .NET-Laufzeit verwendet, ist die .NET-Laufzeit beteiligt, dies liegt jedoch bereits in der Verantwortung von exe Code selbst, nicht OS Loader).
Ped7g
1
● .exe und dll sind die kompilierte Version von c # -Code, die auch als Assemblys bezeichnet werden.
● .exe ist eine eigenständige ausführbare Datei, die direkt ausgeführt werden kann.
● .dll ist eine wiederverwendbare Komponente, die nicht direkt ausgeführt werden kann und für deren Ausführung andere Programme erforderlich sind.
Jemand hatte wahrscheinlich das Gefühl, dass Ihre Antwort nicht detailliert genug war.
JesperE
Ja, die Leute wissen vielleicht nicht, was ein ausführbares Programm ist, und das wird selbst zu einer ganz neuen Frage.
Mindless
0
Unterschied in 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 separaten 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 mit anderen Programmen geteilt werden kann.
3) DLL kann nicht direkt ausgeführt werden, da sie zum Laden und Ausführen durch andere Programme ausgelegt sind. EXE ist ein Programm, das direkt ausgeführt wird.
Wenn eine Assembly als Klassenbibliothek kompiliert wird und Typen für andere Assemblys bereitstellt, hat sie die ifle-Erweiterung .dll
(Dynamic Link Library) und kann nicht eigenständig ausgeführt werden.
Wenn eine Assembly als Anwendung kompiliert wird, hat sie die Dateierweiterung
.exe(ausführbar) und kann eigenständig ausgeführt werden. Vor .NET Core 3.0 wurden Konsolen-Apps zu DLL-Dateien kompiliert und mussten mit dem Befehl dotnet run oder einer ausführbaren Host-Datei ausgeführt werden. - Quelle
Der große genaue Unterschied zwischen DLL und EXE besteht darin, dass DLL keinen Einstiegspunkt hat und EXE. Wenn Sie mit C ++ vertraut sind, können Sie sehen, dass Build EXE die Eingabefunktion main () hat und DLL nicht :)
Antworten:
EXE:
DLL:
Für weitere 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_E__
Referenz: http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx
quelle
LibMain
Funktion eine Benachrichtigung erhalten, wenn ein Thread gestartet oder gestoppt wird .Ich weiß nicht, warum jeder diese Frage im Kontext von .NET beantwortet. Die Frage war allgemein und erwähnte .NET nirgendwo.
Nun, die Hauptunterschiede sind:
EXE
DLL
Das Dateiformat von DLL und exe ist im Wesentlichen dasselbe. Windows erkennt den Unterschied zwischen DLL und EXE über den PE-Header in der Datei. Einzelheiten zum PE-Header finden Sie in diesem Artikel zu MSDN
quelle
Der Unterschied besteht darin, dass eine EXE-Datei einen Einstiegspunkt hat, eine "Haupt" -Methode, die bei der Ausführung ausgeführt wird.
Der Code in einer DLL muss von einer anderen Anwendung aufgerufen werden.
quelle
Es gibt noch einige Unterschiede in Bezug auf die Struktur, die Sie erwähnen könnten.
Characteristics
Mitglied vonIMAGE_FILE_HEADER
innen schauenIMAGE_NT_HEADERS
. Für eine DLL ist dasIMAGE_FILE_DLL
Flag (0x2000) aktiviert. Für eine EXE ist es dasIMAGE_FILE_EXECUTABLE_IMAGE
(0x2) -Flag.IMAGE_OPTIONAL_HEADER
) befindet sich dasImageBase
Mitglied. Es gibt die virtuelle Adresse an, unter der das PE davon ausgeht, dass es geladen wird. Wenn es an einer anderen Adresse geladen wird, können 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 in denselben Prozess geladene DLL-Dateien können dieselbe Adresse anfordern. Aus diesem Grund verfügt eine DLL über ein anderes Datenverzeichnis namens 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 verweisen. Die meisten EXE-Dateien haben dieses Verzeichnis nicht, aber einige alte Compiler generieren sie.Weitere Informationen zu diesem Thema finden Sie unter @ MSDN .
quelle
Diese Antwort war etwas detaillierter als ich dachte, las sie aber durch.
DLL:
In den meisten Fällen ist eine DLL-Datei eine Bibliothek . Es gibt verschiedene Arten von Bibliotheken, dynamische und statische - lesen Sie über den Unterschied . DLL steht für Dynamic Link Library, die uns sagt, dass es ein Teil des Programms ist, aber nicht das Ganze. Es besteht aus wiederverwendbaren Softwarekomponenten ( Bibliothek ), die Sie für mehr als ein einzelnes Programm verwenden können . Beachten Sie, dass es in vielen Anwendungen immer möglich ist, den Quellcode der Bibliothek mithilfe von Copy-Paste zu verwenden. Die Idee einer DLL / statischen Bibliothek besteht jedoch darin, dass Sie den Code einer Bibliothek aktualisieren und gleichzeitig alle Anwendungen mit aktualisieren können es - ohne zu kompilieren.
Beispiel:
Stellen Sie sich vor, Sie erstellen eine Windows-GUI-Komponente wie eine Schaltfläche . In den meisten Fällen möchten Sie den von Ihnen geschriebenen Code wiederverwenden, da es sich um eine komplexe, aber häufig vorkommende Komponente handelt. Sie möchten, dass viele Anwendungen ihn verwenden, möchten ihnen jedoch nicht den Quellcode geben, den Sie nicht kopieren können - Fügen Sie den Code für die Schaltfläche in jedes Programm ein, damit Sie eine DL-Bibliothek (DLL) erstellen möchten. .
Diese "Button" -Bibliothek wird von EXE benötigt Cutables zum Ausführen benötigt. Ohne sie werden sie nicht ausgeführt, da sie nicht wissen, wie sie die Schaltfläche erstellen, sondern nur, wie sie mit ihr sprechen.
Ebenso kann eine DLL nicht ausgeführt werden, da sie nur ein Teil des Programms ist, aber nicht über die Informationen verfügt, die zum Erstellen eines "Prozesses" erforderlich sind. .
EXE:
Eine ausführbare Datei ist das Programm . Es weiß, wie man einen Prozess erstellt und wie man mit der DLL spricht. Es benötigt die DLL, um eine Schaltfläche zu erstellen, und ohne sie wird die Anwendung nicht ausgeführt - ERROR.
hoffe das hilft....
quelle
using SomeClassFromALibrary
, wird diese Bibliothek über eine DLL mit dem Projekt verknüpft. Ich versuche nur zu sehen, ob ich richtig versteheSowohl DLL als auch EXE sind PE-Formate (Portable Executable)
Eine 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 eine beliebige Anwendung oder Exe sein. Die DLL-Bindung erfolgt zur Laufzeit. Deshalb heißt es "Dynamic Link" -Bibliothek.
Eine ausführbare Datei (EXE) ist ein Programm, das ausgeführt werden kann. Es hat einen eigenen Einstiegspunkt. Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header enthält ein Feld, in dem sich der Einstiegspunkt für das Programm befindet. In DLLs wird es nicht verwendet (oder zumindest nicht als Einstiegspunkt).
Es gibt viele Software zur Überprüfung der Header-Informationen. Der einzige Unterschied, der dazu führt, dass beide unterschiedlich funktionieren, ist das Bit im Header, wie in der folgenden Abbildung gezeigt.
Die EXE-Datei hat nur einen einzigen Haupteintrag. Dies bedeutet, dass es sich um eine isolierte Anwendung handelt. Wenn ein System exe startet, wird ein neuer Prozess erstellt, während DLLs viele Einstiegspunkte haben. Wenn die Anwendung sie verwendet, wird kein neuer Prozess gestartet. Die DLL kann wiederverwendet und versioniert werden. DLL reduziert den Speicherplatz, da verschiedene Programme dieselbe DLL verwenden können.
quelle
.exe
oder.dll
nicht? Es ist dieses Flag in der Kopfzeile, das sie wirklich auszeichnet. Wenn ich also ein Flag erstelleexe
und es über die GUI-Interaktion.dll
benenne, aber dann dieses Flag manuell ändere, ist es immer noch lauffähig?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, wird eine Fehlermeldung über einen fehlenden Einstiegspunkt angezeigt. Eine EXE ist ein Programm, das ausgeführt werden kann. Es hat einen Einstiegspunkt. Ein Flag im PE-Header gibt an, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung). Der PE-Header enthält 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 besteht darin, dass DLLs in den meisten Fällen einen Exportabschnitt haben , in den Symbole exportiert werden. EXEs sollten niemals einen Exportabschnitt haben, da sie keine Bibliotheken sind, aber nichts verhindert dies. Dem Win32-Loader ist das egal.
Ansonsten sind sie identisch. Zusammenfassend sind EXEs ausführbare Programme, während DLLs Bibliotheken sind, die in einen Prozess geladen werden und nützliche Funktionen wie Sicherheit, Datenbankzugriff oder ähnliches enthalten.
quelle
Dll v / s Exe
1) Die DLL-Datei ist eine dynamische Linkbibliothek, die in exe-Dateien und 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. Dies 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. Beispiel: Windows-Programm
3) Wiederverwendbarkeits-
DLL: Sie können für eine andere Anwendung wiederverwendet werden. Solange der Codierer die Namen und Parameter der Funktionen und Prozeduren in der DLL-Datei kennt.
EXE: Nur für einen bestimmten Zweck.
4) Eine DLL würde denselben Prozess und Speicherplatz der aufrufenden Anwendung gemeinsam nutzen, während eine
EXE-Datei ihren separaten Prozess- und Speicherbereich erstellt.
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 jedem Programm kopieren und einfügen, also entscheiden Sie, dass Sie eine DL erstellen möchten. Bibliothek (DLL).
EXE: Wenn wir mit Projektvorlagen wie Windows Forms-Anwendungen, Konsolenanwendungen, WPF-Anwendungen und Windows-Diensten arbeiten, wird beim Kompilieren eine Exe-Assembly generiert.
6) Ähnlichkeiten:
Sowohl DLL als auch EXE sind Binärdateien mit einer komplexen verschachtelten Struktur, die durch das Format Portable Executable definiert ist, und sie können nicht von Benutzern bearbeitet werden.
quelle
Die .exe ist das Programm. Die DLL ist eine Bibliothek, in die eine EXE-Datei (oder eine andere DLL) aufrufen kann.
Was sakthivignesh sagt, kann darin zutreffen, dass eine .exe eine andere verwenden kann, als wäre es eine Bibliothek, und dies geschieht (zum Beispiel) mit einigen COM-Komponenten. In diesem Fall ist die "Slave" -Exe ein separates Programm (genau genommen ein separater Prozess - möglicherweise auf einem separaten Computer ausgeführt), der jedoch Anforderungen von anderen Programmen / Komponenten / was auch immer akzeptiert und verarbeitet.
Wenn Sie jedoch nur eine zufällige EXE- und DLL-Datei aus einem Ordner in Ihren Programmdateien auswählen, ist COM wahrscheinlich nicht relevant - es handelt sich lediglich um ein Programm und seine dynamisch verknüpften Bibliotheken.
Mithilfe von Win32-APIs kann ein Programm eine DLL mithilfe der LoadLibrary- und GetProcAddress-API-Funktionen IIRC laden und verwenden. In Win16 gab es ähnliche Funktionen.
COM ist in vielerlei Hinsicht eine Weiterentwicklung der DLL-Idee, die ursprünglich als Grundlage 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ärcode (insbesondere System-APIs) zwischen mehreren laufenden Programmen zu teilen, um die Speichernutzung zu minimieren.
quelle
Eine EXE-Datei ist für das System als reguläre ausführbare Win32-Datei sichtbar. Der Einstiegspunkt bezieht sich auf einen kleinen Loader, der die .NET-Laufzeit initialisiert und anweist, die in der EXE enthaltene Assembly zu laden und auszuführen. Eine DLL ist für das System als Win32-DLL sichtbar, jedoch höchstwahrscheinlich ohne Einstiegspunkte. Die .NET-Laufzeit speichert Informationen zur enthaltenen Assembly in einem eigenen Header.
quelle
● .exe und dll sind die kompilierte Version von c # -Code, die auch als Assemblys bezeichnet werden.
● .exe ist eine eigenständige ausführbare Datei, die direkt ausgeführt werden kann.
● .dll ist eine wiederverwendbare Komponente, die nicht direkt ausgeführt werden kann und für deren Ausführung andere Programme erforderlich sind.
quelle
Eine exe ist ein ausführbares Programm, während eine DLL eine Datei ist, die von Programmen dynamisch geladen und ausgeführt werden kann.
quelle
Unterschied in 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 separaten 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 mit anderen Programmen geteilt werden kann.
3) DLL kann nicht direkt ausgeführt werden, da sie zum Laden und Ausführen durch andere Programme ausgelegt sind. EXE ist ein Programm, das direkt ausgeführt wird.
quelle
Bitte kommentieren Sie während der Abstimmung.
Für diejenigen, die eine präzise Antwort suchen,
quelle
Der große genaue Unterschied zwischen DLL und EXE besteht darin, dass DLL keinen Einstiegspunkt hat und EXE. Wenn Sie mit C ++ vertraut sind, können Sie sehen, dass Build EXE die Eingabefunktion main () hat und DLL nicht :)
quelle