web-dev-qa-db-fra.com

Différence entre .dll et .exe?

Je veux savoir la différence exacte entre les fichiers dll et exe.

80
Umesh Aawte

EXE:

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

DLL:

  1. C'est une bibliothèque de liens dynamiques
  2. Il y a 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=1http://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

62
firstthumb

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

Eh bien, les principales différences sont les suivantes:

EXE

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

DLL

  1. Une dll a toujours besoin d'un hôte exe pour fonctionner. c'est-à-dire qu'il ne peut jamais s'exécuter dans son propre espace d'adressage.
  2. Le but d'une DLL est de disposer d'un ensemble de méthodes/classes pouvant être réutilisées à partir d'une autre application.
  3. DLL est l'implémentation 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 via l'en-tête PE dans le fichier. Pour plus de détails sur l'en-tête PE, Vous pouvez consulter cet article sur MSDN

114
Aamir

La différence est qu'un fichier EXE a un point d'entrée, une méthode "principale" qui s'exécutera à l'exécution.

Le code dans une DLL doit être appelé à partir d'une autre application.

26
Robin Day

Il y a encore quelques différences concernant la structure que vous pourriez mentionner.

  1. DLL et EXE partagent la même structure de fichiers - Portable Executable ou PE. Pour différencier les deux, on peut regarder dans le membre Characteristics de IMAGE_FILE_HEADER dans IMAGE_NT_HEADERS. Pour une DLL, l'indicateur IMAGE_FILE_DLL (0x2000) est activé. Pour un EXE, c'est l'indicateur IMAGE_FILE_EXECUTABLE_IMAGE (0x2).
  2. Les fichiers PE sont constitués de quelques en-têtes et de plusieurs sections. Il y a généralement une section pour le code, une section pour les données, une section répertoriant les fonctions importées et une section pour les ressources. Certaines sections peuvent contenir plus d'une chose. L'en-tête décrit également une liste de répertoires de données situés dans les sections. Ces répertoires de données permettent à Windows de trouver ce dont il a besoin dans le PE. Mais un type de répertoire de données qu'un fichier EXE n'aura jamais (sauf si vous construisez un fichier EXE de Frankenstein) est le répertoire d'exportation. C’est là que les fichiers DLL contiennent une liste de fonctions qu’ils exportent et peuvent être utilisés par d’autres fichiers EXE ou DLL. De l'autre côté, chaque DLL et chaque EXE ont un répertoire d'importation dans lequel sont répertoriées les fonctions et les fichiers DLL nécessaires à l'exécution.
  3. Également dans les en-têtes PE (IMAGE_OPTIONAL_HEADER) se trouve le membre ImageBase. Il spécifie l'adresse virtuelle à laquelle le PE suppose qu'il sera chargé. S'il est chargé à une autre adresse, certains pointeurs pourraient pointer vers la mauvaise mémoire. Comme les fichiers EXE sont parmi les premiers à être chargés dans leur nouvel espace d'adressage, le chargeur Windows peut assurer une adresse de chargement constante, généralement 0x00400000. Ce luxe n'existe pas pour une DLL. Deux fichiers DLL chargés dans le même processus peuvent demander la même adresse. C'est pourquoi une DLL possède un autre répertoire de données appelé Répertoire de relocalisation de base, qui réside généralement dans sa propre section - .reloc. Ce répertoire contient une liste d’endroits dans la DLL qui doivent être rebasés/corrigés pour qu’ils pointent vers la bonne mémoire. La plupart des fichiers EXE ne possèdent pas ce répertoire, mais certains anciens compilateurs les génèrent.

Vous pouvez en savoir plus sur ce sujet @ MSDN .

23
kichik

Cette réponse était un peu plus détaillée que je ne le pensais, mais lisez-la.

DLL:
Dans la plupart des cas, un fichier DLL est une bibliothèque . Il existe deux types de bibliothèques, dynamique et statique - en savoir plus sur la différence . DLL signifie lien dynamique ) bibliothèque qui nous indique qu'il s'agit d'un partie du programme mais pas le tout. Il est composé de composants logiciels réutilisables ( bibliothèque ) que vous pouvez utiliser pour plus qu'un seul programme . N'oubliez pas qu'il est toujours possible d'utiliser le code source de la bibliothèque dans de nombreuses applications en utilisant le copier-coller. Toutefois, l'idée d'une bibliothèque DLL/statique est que vous pouvez mettre à jour le code d'une bibliothèque et mettre simultanément toutes les applications à jour en utilisant ça - sans compiler.

Par exemple:
Imaginez que vous créez un composant d'interface graphique Windows comme un bouton . Dans la plupart des cas, vous voudrez réutiliser le code que vous avez écrit car il s'agit d'un composant complexe mais commun - vous voulez que de nombreuses applications l'utilisent mais vous ne l'utilisez pas. voulez leur donner le code source Vous ne pouvez pas copier-coller le code du bouton dans chaque programme, vous décidez donc de créer un DL-Library (DLL) .

Cette bibliothèque "button" est requise par EXE pour pouvoir s'exécuter, sans quoi ils seront exécutés ne pas exécuter parce qu'ils ne savent pas comment créer le bouton, mais comment lui parler.

De même, un DLL ne peut pas être exécuté - exécuté, car il ne s'agit que d'une partie du programme mais ne dispose pas des informations nécessaires pour créer un "processus" .

EXE:
Un exécutable est le programme . Il sait comment créer un processus et comment parler à la DLL. Il a besoin du DLL pour créer un bouton et, sans ce dernier, l'application ne s'exécute pas - ERREUR.

j'espère que cela t'aides....

19
hannson

DLL et EXE sont tous deux Formats Portable Executable (PE)

A Bibliothèque de liens dynamiques (DLL) est une bibliothèque et ne peut donc pas être exécuté directement. Si vous essayez de l'exécuter, vous obtiendrez une erreur concernant un point d'entrée manquant. Il a besoin d’un point d’entrée (fonction principale) pour être exécuté. Ce point d’entrée peut être n’importe quelle application ou exe. La liaison DLL se produit au moment de l'exécution. C'est pourquoi sa bibliothèque s'appelle "Dynamic Link".

Un Exécutable (EXE) est un programme qui peut être exécuté. Il a son propre point d'entrée. Un drapeau à l'intérieur de l'en-tête PE indique de quel type de fichier il s'agit (sans importance de l'extension de fichier). L'en-tête PE a un champ où réside le point d'entrée du programme. Dans les DLL, il n'est pas utilisé (ou du moins pas comme point d'entrée).

Il existe de nombreux logiciels disponibles pour vérifier les informations d'en-tête. La seule différence qui fait que les deux fonctionnent différemment est le bit dans l'en-tête, comme indiqué dans le diagramme ci-dessous.

header

Le fichier EXE ne comporte qu'une seule entrée principale, ce qui signifie qu'il s'agit d'une application isolée. Lorsqu'un système lance Exe, un nouveau processus est créé alors que les DLL ont de nombreux points d'entrée. Ainsi, lorsque l'application l'utilise, aucun nouveau processus n'a été démarré. DLL peut être réutilisé. et versionné. DLL réduit l'espace de stockage car différents programmes peuvent utiliser la même dll.

14
Zaheer Ahmed

Dll v/s Exe

1) Le fichier DLL est une bibliothèque de liens dynamiques qui peut être utilisée dans les fichiers exe et les autres fichiers .ll.
Le fichier EXE est un fichier exécutable fonctionnant dans un processus Séparé, géré par le système d'exploitation.

2) Les DLL ne sont pas directement exécutables. Ce sont des fichiers séparés contenant des fonctions qui peuvent être appelées par des programmes et d’autres DLL pour effectuer des calculs et des fonctions.
Un EXE est un programme qui peut être exécuté. Ex: programme Windows

3) réutilisabilité
DLL: Ils peuvent être réutilisés pour une autre application. Tant que le codeur connaît les noms et les paramètres des fonctions et procédures du fichier DLL.
EXE: uniquement à des fins spécifiques.

4) Un DLL partagerait le même processus et le même espace mémoire de l’appel appelant tout en
EXE crée son processus et son espace mémoire séparés.

5) utilisations
DLL: 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 chaque programme. Vous décidez donc de créer un fichier DL. Bibliothèque (DLL).

EXE: lorsque nous travaillons avec des modèles de projet tels que les applications Windows Forms, les applications console, les applications WPF et les services Windows, ils génèrent un assemblage exe lors de la compilation.

6) similitudes:
DLL et EXE sont des fichiers binaires ayant une structure imbriquée complexe définie par le format Portable Executable, et ils ne sont pas destinés à être modifiables par les utilisateurs.

4
skanda93

Deux choses: l'extension et l'indicateur d'en-tête stockés dans le fichier.

Les deux fichiers sont des fichiers PE. Les deux contiennent exactement la même disposition. Une DLL est une bibliothèque et ne peut donc pas être exécutée. Si vous essayez de l'exécuter, vous obtiendrez une erreur concernant un point d'entrée manquant. Un EXE est un programme qui peut être exécuté. Il a un point d'entrée. Un drapeau à l'intérieur de l'en-tête PE indique de quel type de fichier il s'agit (sans importance de l'extension de fichier). L'en-tête PE a un champ où réside le point d'entrée du programme. Dans les DLL, il n'est pas utilisé (ou du moins pas comme point d'entrée). 

Une différence mineure est que dans la plupart des cas les DLL ont une section d’exportation où les symboles sont exportés. Les fichiers EXE ne doivent jamais avoir de section d’exportation car ils ne sont pas des bibliothèques, mais rien n’empêche cela. Le chargeur Win32 ne s’en soucie pas. 

Autre que cela ils sont identiques. En résumé, les fichiers EXE sont des programmes exécutables, tandis que les DLL sont des bibliothèques chargées dans un processus et contiennent une sorte de fonctionnalité utile, telle que la sécurité, l’accès à une base de données, etc.

3
judy smith

Un fichier EXE est visible par le système sous la forme d'un exécutable Win32 standard. Son entrée Point fait référence à un petit chargeur qui initialise le runtime .NET et tellsit pour charger et exécuter l’Assembly contenu dans le fichier EXE . Un DLL est visible par le système sous la forme: Win32 DLL mais probablement sans aucun point d’entrée Le runtime .NET stocke des informations sur l'assembly Contenu dans son propre en-tête.

dll est une collection de réutilisable fonctionne là où .exe est un exécutable qui peut appeler ceux-ci les fonctions

2
rahul

Le fichier .exe est le programme. Le fichier .dll est une bibliothèque à laquelle un fichier .exe (ou un autre fichier .dll) peut appeler.

Ce que sakthivignesh dit peut être vrai en ce qu'un fichier .exe peut en utiliser un autre comme s'il s'agissait d'une bibliothèque, et cela est fait (par exemple) avec certains composants COM. Dans ce cas, le fichier "esclave" .exe est un programme distinct (à proprement parler, un processus distinct - pouvant s'exécuter sur une machine distincte), mais qui accepte et gère les demandes d'autres programmes/composants/autres.

Toutefois, si vous choisissez simplement des fichiers .exe et .dll aléatoires dans un dossier de vos fichiers de programme, il y a de fortes chances pour que COM ne soit pas pertinent: il ne s'agit que d'un programme et de ses bibliothèques liées dynamiquement.

À l'aide des API Win32, un programme peut charger et utiliser une DLL à l'aide des fonctions API LoadLibrary et GetProcAddress, IIRC. Il y avait des fonctions similaires dans Win16.

COM est à bien des égards une évolution de l'idée DLL, initialement conçue comme la base de OLE2, alors que .NET est le descendant de COM. Les DLL existent depuis Windows 1, IIRC. C’était à l’origine un moyen de partager du code binaire (en particulier des API système) entre plusieurs programmes en cours d’exécution afin de minimiser l’utilisation de la mémoire.

1
Steve314

Un exe est un programme exécutable alors que A DLL est un fichier qui peut être chargé et exécuté dynamiquement par les programmes.

0
Bhushan Bhangale

● Les fichiers .exe et dll sont la version compilée du code c #, également appelés assemblys

● .exe est un fichier exécutable autonome, ce qui signifie qu'il peut être exécuté directement.

● Le fichier .dll est un composant réutilisable qui ne peut pas être exécuté directement et qui nécessite D'autres programmes pour l'exécuter.

0
Kedarnath M S

Différence entre DLL et EXE:

1) DLL est un composant in-process qui signifie qu'il doit s'exécuter dans le même espace mémoire que le processus client. EXE est un composant Out-Process, ce qui signifie qu'il s'exécute dans son propre espace mémoire.

2) La DLL contient des fonctions et des procédures que d'autres programmes peuvent utiliser (favorise la réactivité) alors que EXE ne peut pas être partagé avec d'autres programmes.

3) DLL ne peut pas être exécuté directement car ils sont conçus pour être chargés et exécutés par d'autres programmes. EXE est un programme qui est exécuté directement.

0
rahul sharma