Je veux connaître la différence exacte entre le fichier dll et le fichier exe.
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 ?
Je veux connaître la différence exacte entre le fichier dll et le fichier exe.
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
DLL
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.
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 ?
EXE :
DLL :
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
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.
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.
Il y a un peu plus de différences en ce qui concerne la structure que vous pourriez mentionner.
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.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.
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 .
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....
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.
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 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.
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...