Qu'est-ce que le format de fichier DLL ?
Les fichiers avec l'extension .dll contiennent des bibliothèques de liens dynamiques partagées au sein de Microsoft Windows. Le format .dll utilise la même structure binaire que les fichiers .exe - le format Portable Executable (PE), identifié par les magic bytes MZ à l'offset 0 et une signature PE\0\0 pointée par l'en-tête DOS stub - mais contrairement à un exécutable, une .dll ne peut pas être lancée directement ; elle doit être chargée par un processus hôte.
Toutes les données d'une .dll peuvent être chargées en mémoire et utilisées par plusieurs programmes simultanément. Les bibliothèques contiennent généralement des contrôles ActiveX, des applets du panneau de configuration, des pilotes de périphériques ou des ressources d'icônes et de polices - bien que les fichiers remplissant ces derniers rôles portent souvent des extensions différentes comme .ocx pour les composants COM ou .sys pour les pilotes en mode noyau. Elles sont également utilisées comme composants modulaires d'applications plus vastes, fournissant des fonctions spécifiques sous forme de plugins.
Les bibliothèques peuvent contenir :
- Du code pour des sous-programmes, des fonctions et des plugins
- Des données, y compris des graphiques et des tables de chaînes de caractères
- Des ressources associées telles que des menus, des boîtes de dialogue et des informations de version
La spécification du format .dll est la même que celle des fichiers .exe - les deux utilisent le conteneur PE (ou PE32+ sur Windows 64 bits) - cependant, la bibliothèque ne constitue pas un programme autonome. Au sein du programme appelant, une référence à une bibliothèque et son chargement peuvent être effectués aussi tardivement que nécessaire (chargement différé). Le modèle .dll prend en charge l'architecture d'application modulaire, encourage la réutilisation de fragments de code et réduit à la fois l'utilisation de la mémoire et l'espace disque. Les fichiers .dll gérés compilés pour .NET portent un en-tête CLR aux côtés de la structure PE standard, contenant du bytecode MSIL au lieu du code machine natif.
Sécurité et sûreté
RISQUE : HIGHLes DLL sont du code exécutable et les logiciels malveillants les adorent : des DLL malveillantes s'exécutent au sein de processus légitimes (DLL hijacking/sideloading - placer une DLL corrompue là où une application cherche en premier), et les sites de téléchargement de « DLL fixer » sont un canal classique de logiciels malveillants et d'arnaques. Règles : ne téléchargez jamais de DLL individuelles depuis des sites tiers ; corrigez les erreurs de DLL manquante en réinstallant l'application, en installant le Visual C++ Redistributable / DirectX runtime officiel, ou en exécutant sfc /scannow ; vérifiez la signature numérique des DLL inconnues (Propriétés → Signatures numériques) et analysez-les sur VirusTotal. Supprimer des DLL au hasard dans System32 casse Windows.
Détails du format
en brefProgrammes qui ouvrent les fichiers DLL
Détails techniques
spécifications approfondies| Format binaire | PE (Portable Executable) sur Windows 32 bits ; PE32+ sur Windows 64 bits - même structure de conteneur que .exe |
| Magic bytes | 4D 5A (« MZ ») à l'offset 0 ; « PE\0\0 » (50 45 00 00) à l'offset stocké dans le champ DOS stub e_lfanew (0x3C) |
| Drapeau d'identification DLL | Le bit IMAGE_FILE_DLL (0x2000) dans le champ COFF Characteristics distingue une DLL d'un EXE au sein du même conteneur PE |
| Type MIME | application/vnd.microsoft.portable-executable |
| Mécanisme d'exportation | La table du répertoire d'exportation répertorie les fonctions par nom et/ou numéro ordinal ; les appelants résolvent les adresses d'exécution via la table d'adresses d'exportation (EAT) |
| Mécanisme d'importation | La table du répertoire d'importation déclare les DLL requises et les noms de fonctions ou ordinaux ; le chargeur Windows patche la table d'adresses d'importation (IAT) au moment du chargement |
| Modes de liaison | Liaison implicite (au chargement) via un stub d'importation .lib, ou liaison explicite (à l'exécution) via LoadLibrary() et GetProcAddress() |
| ASLR et relocalisation | La section .reloc contient une table de relocalisation de base ; l'ASLR de Windows randomise l'adresse de chargement réelle à l'exécution, remplaçant l'ImageBase préférée dans l'en-tête optionnel PE |
| Sections communes | .text (code exécutable), .data (données initialisées), .rdata (données en lecture seule et imports), .rsrc (ressources), .reloc (relocalisations de base) |
| Ressources intégrées | La section .rsrc stocke des ressources typées - RT_ICON, RT_DIALOG, RT_STRING, RT_VERSION, RT_MANIFEST - visualisables et modifiables avec des outils tels que Resource Hacker |
| Builds d'architecture | Chaque processeur cible (x86, x64, ARM, ARM64) nécessite un binaire DLL distinct ; pas de support de binaire universel contrairement au dylib de macOS |
| DLL .NET gérées | Les DLL compilées par CLR intègrent un IMAGE_COR20_HEADER pointant vers le bytecode MSIL/CIL plutôt que vers le code machine natif ; décompilables avec ILSpy ou dotPeek |
| Assemblages côte à côte | Le WinSxS de Windows XP+ permet à plusieurs versions de la même DLL de coexister sur une machine, régies par des fichiers manifestes d'application |
| Point d'entrée | Fonction optionnelle DllMain() appelée par le chargeur lors de quatre événements : DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_DETACH |
| Chargement différé | L'option du lieur /DELAYLOAD diffère le chargement de la DLL jusqu'au premier appel à l'une de ses fonctions exportées, réduisant le temps de démarrage du processus |
| Publié | 1985 (Windows 1.0, NE format); current PE format since Windows NT 3.1, 1993 |
| Standard ouvert | Oui · libre de droits |
| Spécification | learn.microsoft.com |