Dynamic Link Library

{{#ifeq:||Un article de Ziki, l'encyclopédie libre.|Une page de Ziki, l'encyclopédie libre.}}
Révision datée du 19 janvier 2023 à 19:24 par >Pautard (des fichiers)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Modèle:Langue du titre Modèle:Voir homonymes Modèle:Infobox Format de données

Une Modèle:Lang (en français, bibliothèque de liens dynamiques<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>) est une bibliothèque logicielle dont les fonctions sont chargées en mémoire par un programme, au besoin, lors de son exécution, par opposition aux bibliothèques logicielles statiques ou partagées dont les fonctions sont chargées en mémoire avant le début de l'exécution du programme.

.dll est une extension de nom de fichier<ref>Modèle:Lien web</ref> utilisée par des fichiers contenant une Dynamic Link Library.

Ces bibliothèques logicielles ont été inventées dans Multics en 1964 et existent dans Windows depuis 1985<ref>{{#invoke:Langue|indicationDeLangue}}InfoWorld, 23 mai 1988 Modèle:ISSN.</ref>,<ref name="dhotre">{{#invoke:Langue|indicationDeLangue}}I. A. Dhotre - A. A. Puntambekar, Systems Programming, Technical Publications - 2008 Modèle:ISBN.</ref>. Elles constituent une des fondations des systèmes d'exploitation Windows et sont utilisées pour les interfaces de programmation, les pilotes, les [[Composant d'interface graphique|Modèle:Lang]] et les polices de caractères.

Fonctionnement

Un programme informatique est construit à partir d'un ensemble de fichiers source contenant des fonctions<ref name="dhotre" />. Les bibliothèques logicielles sont des lots de fonctions stockées dans des fichiers. Une bibliothèque logicielle contient généralement un ensemble de fonctions autour du même sujet<ref name="haldar">{{#invoke:Langue|indicationDeLangue}}Sibsankar Haldar - Alex Alagarsamy Aravind, Modèle:Lang, Pearson Education India - 2010 Modèle:ISBN.</ref>. Par cette technique, une modification subséquente d'une des fonctions de la bibliothèque nécessite de la re-créer, sans qu'il soit nécessaire de re-créer la totalité de l'application<ref name="dhotre" />.

Cette technique nécessite de charger en mémoire les fichiers de bibliothèque en même temps que le programme qui les utilise<ref name="fisher">{{#invoke:Langue|indicationDeLangue}}Joseph A. Fisher - Paolo Faraboschi - Clifford Young,Modèle:Lang, Elsevier - 2005, Modèle:ISBN.</ref>, ensuite de quoi un programme — l'éditeur de liens — rend l'application opérationnelle en tissant des liens entre les différents fichiers<ref name="fisher" />.

Les bibliothèques logicielles peuvent être :

  • Statiques

Une bibliothèque statique est incorporée dans un programme et l'édition de liens est effectuée pendant sa construction. Lorsqu'une bibliothèque statique est modifiée, chaque programme qui l'utilise doit être reconstruit pour incorporer les modifications<ref name="haldar" /> ;

  • Partagées

Une bibliothèque partagée n'est pas incorporée dans les programmes qui l'utilisent, mais est reliée à ces programmes lors de leur chargement, c'est-à-dire immédiatement avant l'exécution du programme. Une bibliothèque partagée peut être utilisée par de nombreux programmes et une modification de la bibliothèque ne nécessite pas de reconstruction des programmes, du moment que l'interface de programmation de la bibliothèque ne change pas<ref name="haldar" /> ;

  • Dynamiques

Les bibliothèques dynamiques sont identiques aux bibliothèques partagées, mais sont utilisées d'une manière différente. De telles bibliothèques sont reliées à l'application lorsque celle-ci en a besoin. Les programmes qui les utilisent comportent les instructions nécessaires au chargement et à la liaison<ref name="haldar" />.

Dans la technique de la liaison dynamique utilisée par les DLL, l'opération de liaison est exécutée en deux temps : tout d'abord, au moment de la construction de l'application, l'éditeur de liens crée des connecteurs, puis au chargement — immédiatement avant l'exécution de l'application — les connecteurs sont reliés entre eux<ref name="fisher" />. Les DLL sont au format COFF, également utilisé dans IBM AIX<ref name="calcote" />.

Dans Windows

Les DLL sont une des fondations des systèmes d'exploitation Windows. Les fonctions internes de Windows sont mises à disposition des programmes par des interfaces de programmation mises en œuvre par des fichiers DLL<ref name="perry">Greg Perry, Visual Basic 6, Pearson Education France Modèle:ISBN.</ref>. Les trois principales bibliothèques sont User32.dll (manipulation de l'interface utilisateur), GDI32.dll (manipulation des dispositifs d'impression et d'affichage), et Kernel32.dll (utilisation des fonctions du noyau de Windows concernant les fichiers et les processus). D'autres fichiers de Windows souvent utilisés en programmation sont comdlg32.dll, MAPI32.dll, netapi32.dll et winmm.dll<ref name="perry" />. Les fichiers DLL sont également utilisés pour de nombreuses extensions : pilotes, boîtes de dialogue, [[Composant d'interface graphique|Modèle:Lang]], polices de caractères<ref name="cantu">{{#invoke:Langue|indicationDeLangue}}Marco Cantu, Modèle:Lang, John Wiley & Sons - 2006 Modèle:ISBN.</ref>.

Windows offre la possibilité de détourner ou de subtiliser les fonctions des DLL. Outre des raisons légitimes, ces possibilités sont exploitées par des rootkit, qui injectent des fonctionnalités à l'insu de l'utilisateur en subtilisant les DLL du système d'exploitation<ref>{{#invoke:Langue|indicationDeLangue}}Greg. Hoglund - James Butler, Modèle:Lang, Modèle:Lang - 2006 Modèle:ISBN.</ref>.

Programmation

Des langages comme C, C++ ou Delphi sont aptes à créer des DLL qui peuvent être exploitées par des programmes. De nombreux outils de développement qui proposent des bibliothèques d'exécution à l'instar des Microsoft Foundation Class Library (MFC) ou de la Visual Component Library (VCL) de Borland proposent soit une liaison statique (intégration directe du code dans l'exécutable) soit une liaison dynamique (la bibliothèque est alors à distribuer sous forme de DLL).

L'utilisation de DLL permet de mettre à disposition du code et de rendre modulaire l'architecture d'une application. La mise à jour de celle-ci peut également se faire en remplaçant uniquement les DLL obsolètes. Néanmoins, l'utilisation de plusieurs versions concurrentes de DLL est problématique sous Windows et conduit à certaines incompatibilités regroupées sous le terme Modèle:Langue.

Modèle:Lang (l'enfer des DLL)

La construction des DLL permet de facilement les remplacer pour y ajouter des nouvelles fonctions et améliorer les fonctions existantes. Il arrive cependant que le remplacement entraîne des modifications en profondeur des fonctions existantes, ce qui entraîne des pannes et un fonctionnement erroné des programmes qui l'utilisent. De plus, les DLL réalisées avec un compilateur tendent à être incompatibles avec les exécutables réalisés avec un autre compilateur

C'est une cause connue d'appels aux services techniques qui ont baptisé ce phénomène Modèle:Lang, « l'enfer des DLL » en anglais<ref>Modèle:Ouvrage.</ref>.

Lorsqu'un fichier DLL manque sur l'ordinateur de l'utilisateur, le lancement d'un programme qui s'en sert provoquera un message Modèle:Lang (« DLL non trouvée ») qui n'est d'aucune utilité pour l'utilisateur. Si la DLL existe mais n'est pas valable pour le programme, alors celui-ci n'a aucun moyen de le vérifier, ce qui peut entraîner des messages DynaLink error voire un crash du programme<ref name="gems">{{#invoke:Langue|indicationDeLangue}}Mark A. Deloura, Modèle:Lang, Cengage Learning - 2001 Modèle:ISBN.</ref>. Une des causes de tels incidents est que Windows n'offre pas de mécanisme interne de contrôle de version — mécanisme qui garantit qu'un programme sera associé avec la bibliothèque pour laquelle il a été construit<ref name="calcote">Modèle:Ouvrage.</ref>.

Un des moyens qu'ont les programmeurs de lutter contre le Modèle:Lang est de charger explicitement le fichier DLL : au lieu que le fichier soit automatiquement chargé au lancement du programme qui l'utilise, le programme utilise la fonction LoadLibrary, qui charge le fichier s'il existe<ref name="gems" />. La principale différence entre cette méthode et la méthode classique est que l'exécutable ne connait pas à l'avance les adresses des fonctions dont il aura besoin.

Un autre moyen est de copier tout ou une partie du code source de la DLL dans celui du futur exécutable afin de se passer de la dite DLL. Cela peut, cependant, être illégal (souvent à cause d'une incompatibilité des licences) ou techniquement impossible (généralement parce que le code source de la DLL n'est pas disponible) mais, même quand c'est à la fois possible et légal, cela reste généralement exclu en raison d'usages.

DLL hijacking

À cause d'une vulnérabilité appelée « Modèle:Lang », « Modèle:Lang », « Modèle:Lang », « Modèle:Lang »<ref name=BleepingComputer/> ou « Modèle:Lang », plusieurs programmes chargent et exécutent des DLL malicieuses qui se trouvent dans les mêmes dossiers que des fichiers ouverts par ces programmes<ref>Modèle:Ouvrage</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>. Les programmes exécutés à partir de dossiers non protégés, tels que « Téléchargements » et « Tmp » qui sont en lecture/écriture, sont plus susceptibles d'être visés<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>,<ref>Modèle:Lien web</ref>.

Cette vulnérabilité aurait été découverte en 2000 pour la première fois<ref>Modèle:Lien web</ref>. En août 2010, après qu'elle soit redécouverte, plusieurs médias de différents pays en discutent. Plusieurs centaines de programmes sont alors jugés vulnérables<ref>Modèle:Lien web</ref>. En avril 2022, il est révélé que VLC media player aurait fait l'objet d'une telle attaque pendant une quinzaine d'années<ref name=BleepingComputer>Modèle:Lien web</ref>.

Notes et références

Modèle:Références

Voir aussi

Bibliographie

Liens externes

Modèle:Palette Modèle:Portail