98 votes

Différence entre .dll et .exe ?

Je veux connaître la différence exacte entre le fichier dll et le fichier exe.

1 votes

Vous devriez ajouter un peu de contexte ici : Êtes-vous un débutant ? Cherchez-vous une sorte de spécification technique approfondie du matériel de PE ou autre chose ?

3 votes

Il est vrai que je suis un débutant. Il s'agit d'une question d'entretien, comme indiqué.

0 votes

Plus important encore, c'est un doublon y compris un (supprimé) par sakthivignesh...

144voto

Aamir Points 8357

Je ne sais pas pourquoi tout le monde répond à cette question dans le contexte de .NET. La question était d'ordre général et ne mentionnait nulle part .NET.

Eh bien, les principales différences sont :

EXE

  1. Un exe fonctionne toujours dans son propre espace d'adressage, c'est-à-dire qu'il s'agit d'un processus distinct.
  2. Le but d'un EXE est de lancer une application distincte.

DLL

  1. Une dll a toujours besoin d'un exe hôte pour fonctionner, c'est-à-dire qu'elle ne peut jamais fonctionner dans son propre espace d'adressage.
  2. Le but d'une DLL est d'avoir une collection de méthodes/classes qui peuvent être réutilisées à partir d'une autre application.
  3. DLL est la mise en œuvre par Microsoft d'une bibliothèque partagée.

Le format de fichier de DLL et exe est essentiellement le même. Windows reconnaît la différence entre DLL et EXE grâce à l'en-tête PE du fichier. Pour plus de détails sur l'en-tête PE, Vous pouvez consulter cet article sur MSDN.

4 votes

Donc, si vous voulez, vous pouvez renommer et éditer l'en-tête de la fikle pour transformer une dll en exe et vice versa ?

0 votes

@RCIX : Je doute que cela soit possible ?

0 votes

C'est très probablement impossible - voir La réponse de kichik ci-dessous.

77voto

Firstthumb Points 1604

EXE :

  1. C'est un fichier exécutable
  2. Lors du chargement d'un exécutable, aucune exportation n'est appelée, mais seulement le point d'entrée du module.
  3. Lorsqu'un système lance un nouvel exécutable, un nouveau processus est créé
  4. Le thread d'entrée est appelé dans le contexte du thread principal de ce processus.

DLL :

  1. C'est une bibliothèque de liens dynamiques
  2. Il existe plusieurs symboles exportés.
  3. Le système charge une DLL dans le contexte d'un processus existant.

Pour plus de détails : 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

Référence : http://www.dotnetspider.com/forum/34260-What-difference-between-dll-exe.aspx

9 votes

Le système charge une DLL dans un PROCESSUS existant, et non dans un fil. Chaque DLL d'un processus peut recevoir une notification lorsqu'un thread démarre ou s'arrête, par l'intermédiaire d'une commande de type LibMain fonction.

13 votes

Vos points 1 et 2 ne sont pas 100% corrects. Puisque vous pouvez utiliser LoadLibraryEx sur un exe ou une dll, cela signifie que vous pouvez utiliser GetProcAddress pour charger un point d'entrée depuis un exe ou une dll. Donc, à cet égard, les fichiers exe et dll peuvent être liés dynamiquement et peuvent avoir un nombre quelconque de points d'entrée.

32voto

Robin Day Points 39440

La différence est qu'un EXE a un point d'entrée, une méthode "main" qui sera exécutée à l'exécution.

Le code contenu dans une DLL doit être appelé depuis une autre application.

12 votes

Il s'agit d'un mauvais chargement, qui implique que les DLL n'ont pas de points d'entrée. Les DLL peuvent avoir un point d'entrée DLLMain qui est appelé lorsque (entre autres choses) la DLL est chargée dans le processus.

30voto

kichik Points 7249

Il y a un peu plus de différences en ce qui concerne la structure que vous pourriez mentionner.

  1. Les deux DLL et EXE partagent la même structure de fichier - fichier Exécutable Portable, ou PE. Pour différencier les deux, on peut regarder l' Characteristics membre de l' IMAGE_FILE_HEADER à l'intérieur d' IMAGE_NT_HEADERS. Pour une DLL, il a l' IMAGE_FILE_DLL (0x2000) indicateur allumé. Pour un EXE c'est l' IMAGE_FILE_EXECUTABLE_IMAGE (0x2) drapeau.
  2. PE fichiers sont constitués de certains en-têtes et un certain nombre de sections. Il y a généralement une section de code, une section pour les données, une liste des fonctions importées et une section pour les ressources. Certains articles peuvent contenir plus d'une chose. L'en-tête décrit également une liste de répertoires de données qui sont situés dans les sections. Ces répertoires de données sont ce qui permet à Windows de trouver ce dont il a besoin dans le PE. Mais d'un type de données de répertoire que l'EXE n'aura jamais (sauf si vous êtes la construction d'un frankenstein EXE) est le répertoire d'exportation. C'est là que les fichiers DLL de disposer d'une liste de fonction de l'exportation et peut être utilisé par d'autres fichiers EXE ou DLL. De l'autre côté, chaque DLL et EXE a un répertoire d'importation, où il dresse la liste des fonctions et DLL les fichiers dont il a besoin pour s'exécuter.
  3. Également dans le PE-têtes (IMAGE_OPTIONAL_HEADER) est l' ImageBase membre. Il spécifie l'adresse virtuelle de la PE à qui l'on suppose qu'il sera chargé. S'il est chargé à une autre adresse, quelques indications le mal de mémoire. Comme les fichiers EXE sont parmi les premiers à être chargés dans leur nouvel espace d'adressage, le chargeur de Windows peut assurer une constante de l'adresse de chargement et de ce qui est habituellement le 0x00400000. Que le luxe n'existe pas pour une DLL. Deux fichiers DLL chargées dans le même processus peut demander à la même adresse. C'est pourquoi une DLL a un autre répertoire de données appelée déplacement de la Base d'Annuaire qui réside habituellement dans sa propre section - .reloc. Ce répertoire contient une liste des lieux à la DLL qui doit être relocalisée/patché afin qu'ils pointent vers la droite de la mémoire. La plupart des fichiers EXE n'ont pas ce répertoire, mais certains vieux compilateurs génèrent.

Vous pouvez en lire plus sur ce sujet @ MSDN.

2 votes

1. Comme il s'agit de drapeaux, les deux peuvent être activés en même temps. 2. Comme vous l'avez dit, c'est possible mais très peu probable. 3. ASLR relocalisera l'exe aussi, s'il le peut. Donc oui, même un exe peut avoir des relocalisations. Dans l'ensemble, les EXEs qui sont des DLLs sont possible mais rare .

23voto

Hannson Points 2165

Cette réponse est un peu plus détaillée que je ne le pensais, mais lisez-la jusqu'au bout.

DLL :
Dans la plupart des cas, un fichier DLL est une bibliothèque . Il existe deux types de bibliothèques, dynamique et statique. lire la différence . DLL signifie lien dynamique bibliothèque ce qui nous indique que c'est un partie du programme mais no tout ça. Il est constitué de composants logiciels réutilisables ( bibliothèque ) que vous pourriez utiliser pour plus qu'un seul programme . Gardez à l'esprit qu'il est toujours possible d'utiliser le code source de la bibliothèque dans de nombreuses applications par copier-coller, mais l'idée d'une DLL/bibliothèque statique est que vous pouvez mettre à jour le code d'une bibliothèque et en même temps mettre à jour toutes les applications qui l'utilisent - sans compiler.

Par exemple :
Imaginez que vous créez un Composant GUI de Windows comme un Bouton . Dans la plupart des cas, vous voudrez réutiliser le code que vous avez écrit parce qu'il s'agit d'un code complexe mais un commun Vous voulez que de nombreuses applications l'utilisent mais vous ne voulez pas leur donner le code source Vous ne pouvez pas copier-coller le code du bouton dans tous les programmes, vous décidez donc de créer un composant Bibliothèque DL (DLL) .

Ce site "bouton" La bibliothèque est exigée par EXE pour fonctionner, et sans lui, ils ne fonctionneront pas car ils ne savent pas comment créer le bouton, seulement comment lui parler.

De même, une DLL ne peut pas être exécutée - run, parce qu'elle n'est qu'une partie du programme et qu'elle ne dispose pas des informations nécessaires pour créer une "processus" .

EXE :
Un exécutable est le programme . Il sait comment créer un processus et comment parler à la DLL. Il besoins la DLL pour créer un bouton, et sans elle l'application ne fonctionne pas - ERROR.

J'espère que cela vous aidera....

0 votes

Dans le monde du développement .NET, lorsque vous importez des choses à partir d'autres modules, comme par exemple, en C# using SomeClassFromALibrary cette bibliothèque est liée au projet via une DLL ? J'essaie juste de voir si je comprends bien.

0 votes

Vous utilisez normalement le mot-clé using pour les espaces de noms, pas pour les classes. L'exception est pour using static disponible à partir de c# 6 qui importe tous les membres statiques présents dans la classe spécifiée( lien ). Le site using promet au compilateur qu'au moment de l'exécution, il y aura une bibliothèque contenant ce fichier. espace de noms . La bibliothèque n'est pas liée au projet via cette DLL, la DLL est la bibliothèque qui est liée au projet (assemblage). Cette DLL contient tout le code qui a été promis lors de la compilation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X