2009-07-31 7 views
71

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

+1

Sie sollten einige Kontext hier hinzufügen: Sind Sie ein Anfänger Sind Sie eine Art von tiefen technischen Spezifikationen des PE Sachen Oder etwas anderes – khebbie

+0

suchen Es ist wahr, ich bin ein Anfänger. Es ist eine Interview-Frage wie markiert. –

+0

Ich denke, alle Antworten waren gut und informativ. Ich werde das immer nach mehr überprüfen, Danke. –

Antwort

58

EXE diese Funktionen aufrufen können:

  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 bestehenden Prozesses.

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_EXE_and_a_DLL

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

+7

Tatsächlich gibt es nur einen Einstiegspunkt in einer DLL, wenn es eine nicht verwaltete DLL ist. Die Frage war nicht .NET-spezifische IMO. – Aamir

+9

Das System lädt eine DLL in einen bestehenden Prozess, nicht Thread. Jede DLL in einem Prozess kann eine Benachrichtigung erhalten, wenn ein Thread über eine LibMain-Funktion gestartet oder gestoppt wird. –

+11

Ihre Punkte 1 und 2 sind nicht 100% richtig. Da Sie LoadLibraryEx für eine Exe oder DLL verwenden können, können Sie die GetProcAddress verwenden, um einen Einstiegspunkt von einer Exe oder DLL zu laden. Also in dieser Hinsicht beide EXE-und DLL-Dateien dynamisch verknüpft werden können und eine beliebige Anzahl von Einstiegspunkten haben können. – jussij

1

Ein exe ist ein executible Programm während Eine DLL ist eine Datei, die dynamisch durch Programme geladen und ausgeführt werden können.

+0

Warum gab jemand negativ? Ich würde mich freuen, wenn ich den Grund auch anders wüsste, was ist der Sinn der Abstimmung? –

+4

Jemand hat wahrscheinlich gefühlt, dass Ihre Antwort nicht detailliert genug war. – JesperE

+0

ja, die Leute wissen vielleicht nicht, was ein ausführbares Programm ist, und das wird selbst eine ganz neue Frage. – Mindless

2

eine EXE sichtbar ist für das System als eine reguläre ausführbare Win32. Sein Eintrag Punkt bezieht sich auf einen kleinen Lader, der die Laufzeit .NET initialisiert und erzählt es um die Anordnung in der EXE-Datei enthalten sind, zu laden und auszuführen. Eine DLL ist für das System als Win32-DLL sichtbar, aber höchstwahrscheinlich ohne Einstiegspunkte. Die .NET-Laufzeit speichert Informationen über die enthaltene Assembly in einer eigenen Kopfzeile.

dll ist eine Sammlung von wieder verwendbaren Funktionen, bei denen als eine Exe ist eine ausführbar, die

+0

Die .NET-Runtime hat nichts mit .exe oder .dll zu tun, sie sind binäre Maschinen-Code-Dateien (Wenn diese in einer Programmiersprache erzeugt werden, die .NET-Runtime verwendet, ist .NET-Laufzeit beteiligt, aber das ist bereits Verantwortung der exe-Code selbst, nicht OS Loader). – Ped7g

-1

Der Haupt genaue Unterschied zwischen DLL und EXE die DLL hat keinen Eintrag Punkt bekam und EXE tut. Wenn Sie mit C++ vertraut sind Sie, dass Build EXE sehen kann, hat main() Entry-Funktion und DLL ist :) nicht

+0

Denke nicht. Hier klicken http://msdn.microsoft.com/en-us/library/ms682596(VS.85).aspx – Aamir

100

Ich weiß nicht, warum jeder wird diese Frage in Zusammenhang mit .NET zu beantworten. Die Frage war allgemein gehalten und erwähnte .NET nirgends.

Nun, sind die wichtigsten Unterschiede:

EXE

  1. Eine exe immer in seinem eigenen Adressraum läuft das heißt: Es ist ein separater Prozess ist.
  2. Der Zweck einer EXE ist eine separate Anwendung seiner eigenen zu starten.

DLL

  1. Eine DLL braucht immer einen Host-exe 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 das gleiche. Windows erkennt den Unterschied zwischen DLL und EXE durch PE Header in der Datei. Für Details von PE Header, You can have a look at this Article on MSDN

+3

Also, wenn Sie wollten, können Sie den Header des Fikle umbenennen und bearbeiten, um eine DLL in eine exe umzuwandeln und umgekehrt? – RCIX

+0

@RCIX: Ich bezweifle, dass das möglich ist? – VoodooChild

+0

Es ist wahrscheinlich nicht möglich - siehe [Kichiks Antwort] (http://stackoverflow.com/a/4266184/119527) unten. –

16

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

DLL:
In den meisten Fällen ist eine DLL-Datei ist eine Bibliothek. Es gibt ein paar Arten von Bibliotheken, dynamische und statische - read about the difference. DLL steht für dynamic link library, die uns sagt, dass es ein Teil des Programms ist, aber nicht die ganze Sache. Es besteht aus wiederverwendbaren Software-Komponenten (library), die Sie für mehr als ein einziges Programm verwenden können. 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.

Zum Beispiel:
Stellen Sie sich vor Sie erstellen eine Windows GUI component wie ein Knopf. In den meisten Fällen möchten Sie den Code, den Sie geschrieben haben, wiederverwenden, da es sich um eine komplexe, aber gemeinsame Komponente handelt - Sie möchten, dass viele Anwendungen sie verwenden, aber Sie ihnen nicht den Quellcode geben möchten. t Kopieren Sie den Code für die Schaltfläche in jedem Programm und fügen Sie ihn ein. Daher sollten Sie eine DL-Library (DLL) erstellen.

Diese „Knopf“ Bibliothek wird von EXE cutables erforderlich zu laufen, und ohne sie werden sie nicht ausgeführt werden, weil sie nicht wissen, wie die Schaltfläche erstellen, nur, wie man es sprechen.

Ebenso kann eine DLL nicht ausgeführt werden - ausführen, da es nur ein Teil des Programms ist, aber nicht die erforderlichen Informationen zum Erstellen einer "process" enthält.

EXE:
Eine ausführbare ist das Programm. Es weiß, wie man eine process erstellt und wie man mit der DLL spricht. Es benötigt die DLL, um eine Schaltfläche zu erstellen, und ohne es die Anwendung nicht ausgeführt wird - Fehler.

hoffe das hilft ....

+0

In der.NET-Entwicklungswelt, wenn Sie Dinge aus anderen Modulen importieren, wie zum Beispiel in C# 'mit SomeClassFromALibrary', ist diese Bibliothek über eine DLL mit dem Projekt verbunden? Nur versuchen zu sehen, ob ich richtig verstehe – Abdul

20

Der Unterschied ist, 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.

+5

Einfache Antwort .. !! – pvaju896

+7

Dies ist ein Fehlladen, das 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. –

1

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 eine .exe kann eine andere verwenden, als ob es eine Bibliothek wäre, und dies wird (zum Beispiel) mit einigen COM-Komponenten getan. 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 aus einem Ordner in Ihren Programmdateien auswählen, sind die Chancen, dass COM nicht relevant ist - sie sind nur ein Programm und seine dynamisch verknüpften Bibliotheken.

Mithilfe 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 Weiterentwicklung 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.

20

Es gibt ein paar mehr Unterschiede in Bezug auf die 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 das Characteristics Mitglied von IMAGE_FILE_HEADER innerhalb IMAGE_NT_HEADERS schauen. Für eine DLL ist das Flag IMAGE_FILE_DLL (0x2000) aktiviert. Für eine EXE ist es das IMAGE_FILE_EXECUTABLE_IMAGE (0x2) Flag.
  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-Headern() ist das 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 weiteres 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 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 @MSDN lesen.

3

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, dass in den meisten Fällen DLLs einen Exportbereich haben, 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.

+2

+1: So wenige Leute erkennen, dass technisch der Unterschied nur ein Bit im PE-Header ist. –

10

Beide DLL und EXE sind Portable Executable(PE) Formats

A Dynamic-link library (DLL) eine Bibliothek und daher nicht direkt ausgeführt werden können. 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 Executable (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).

Es gibt viele software verfügbar, Header-Informationen zu überprü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 einzelner Haupteintrag bedeutet es isolierte Anwendung ist, wenn ein System exe startet ein neuer Prozess erstellt wird, während DLLs so viele Einstiegspunkte hat, wenn die Anwendung es keine neue Verwendung Prozess gestartet, DLL kann wiederverwendet und versioniert werden. DLL reduziert Speicherplatz, da verschiedene Programme dieselbe DLL verwenden können.

+1

Sie sagen "A flag Innerhalb des PE-Headers wird angezeigt, um welchen Dateityp es sich handelt (unabhängig von der Dateierweiterung) "--- Bedeutet das, ob die Erweiterung' .exe' oder '.dll' ist? Es ist dieses Flag in der Kopfzeile, das sie wirklich auszeichnet ... Wenn ich also eine 'exe 'mache und sie über eine GUI-Interaktion als' .dll' benenne, aber dann dieses Flag manuell ändere, ist es noch lauffähig? – Abdul

2

Dll v/s Exe

1) DLL-Datei ist eine dynamische Link-Bibliothek, die in EXE-Dateien und anderen DLL-Dateien verwendet werden kann.
EXE-Datei ist eine ausführbare Datei, die in einem separaten Prozess ausgeführt wird, 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 einige andere Anwendungen 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 denselben Prozess- und Speicherbereich der aufrufenden Anwendung teilen, während eine
EXE ihren separaten Prozess- und Speicherbereich erstellt.

5) Verwendet
DLL: Sie möchten, dass viele Anwendungen es 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 möchte eine DL-Library (DLL) erstellen.

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

6) Ähnlichkeiten:
Sowohl DLL als auch EXE sind Binärdateien, die eine komplexe verschachtelte Struktur aufweisen, die durch das Portable Executable-Format definiert wird und nicht von Benutzern bearbeitet werden kann.

-1

● .exe und dll sind die kompilierten Versionen von C# code, die auch als Assemblies 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 es erfordert andere Programme, um es auszuführen.