TheCricLinks

Je me pose plein de questions, Internet est un moyen d'y répondre

Nom :

La devise de la France est Liberté - Égalité - Fraternité. Cette devise peut et doit nous aider à trouver le bon chemin.

jeudi 20 mars 2008

Dis Papa, c'est quoi une DLL (Dynamic-Link Library) ? - MSDN

Vous avez dit DLL ?

Si vous ne savez pas ce qu'est une DLL : une DLL est une Dynamic Link Library ou bibliothèque à liaison dynamique. :-) ce qui ne vous éclaire que très peu si vous êtes novice :-D

Explication mot par mot
(petit cours d'informatique pour les nuls, mais pas que... :-)

Bibliothèque : il s'agit d'un ensemble de fonctions informatiques voire de données regroupées parce qu'elles sont liées à un même domaine de fonctionnalité, par exemple la WinINet.dll qui regroupe les fonctions d'accès à Internet et au Web sur Windows et grâce à laquelle vous lisez, pour 90% d'entre-vous, ce texte. Pour d'autres exemples [voir chez MS ici]

Liaison : pour qu'un programme puisse accéder à une fonction, il faut qu'il soit en liaison avec celle-ci dans sa bibliothèque

Plus précisément lorsqu'il y a appel à une fonction f quelconque - point de vue du programmeur qui écrit le programme - il faut que cet appel de f se transforme en appel équivalent mais dans le langage de la machine, bref que le processeur exécute le sous-programme machine situé à une adresse numérique z dans la mémoire de la machine. A chaque fonction f1,f2... en code de programmation (code source) correspond une fonctionnalité z1,z2,... en machine

Ce mécanisme qui transforme les noms utilisés lors de la programmation en adresses sous formes effectives pour la machine s'appelle édition de lien en français et linking en anglais.
Attacher les programmes aux bibliothèques qu'ils utilisent s'effectue avec un éditeur de lien en français appelé linker en anglais.

Dynamique :
parce que cela dépend du moment où cela se passe . Une DLL peut être chargée en mémoire au lancement du programme ou seulement à la demande quand le programme en a besoin
. Le calcul des adresses en machine n'est alors effectué qu'au moment de l'utilisation des fonctionnalités de la DLL ( bon d'accord il y a aussi un mécanisme de cache d'adresses mais ne compliquons pas trop pour les newbies...). Cela peut se voir avec Process Explorer en comparant l'Image Base Address d'une DLL avec sa Base Address , cette dernière étant l'adresse effective en mémoire virtuelle.

Sur le verrouillage des programmes et DLLs en mémoire :
Une DLL peut être utilisée par un ou plusieurs programmes simultanément. A chaque utilisation d'une DLL donnée par un programme donné, celui-ci verrouille la DLL dans le système pour garantir sa présence. Ainsi celle-ci ne sort de la mémoire (virtuelle) que quand tous les programmes qui l'utilisent l'ont déverrouillée.

Pour les geeks que cela intéresse, cela est géré par le DLL Reference Count dont on parle chez Microsoft mais que les hackers analyse mieux [ici : DLL reference count].

Pour les utilisateurs normaux de Windows qu'un verrouillage intempestif et mal opportun peut parfois énerver, il y a unlocker de Cédrick Collomb qui gère le déverrouillage des différents objets de Windows.

Le verrouillage en mémoire explique pourquoi, dans certaines situations, on ne déplacer certains objets. Cela explique aussi que lors de certaines mises à jour, il faut rebooter la machine: Windows ne pouvant effectuer le remplacement que quand les dites DLLs ou autres exécutables ne sont plus en fonctionnement et déverrouillées. Il y a eu une forte amélioration chez Microsoft des dépendances interDLL et donc de la gestion des verrouillages dans Windows , ce qui explique que les mises à jour de Windows se passent mieux qu'il y a quelques années.

Chargement dynamique + Internet = Robinet numérique ouvert :
(Ou comment la pieuvre informatique s'est grandement étendue grâce aux DLL :-)

Chez Microsoft , l'utilisation par les développeurs du système d'exploitation Windows (utilisation des API de Windows) passe pour beaucoup par l'utilisation directe ou indirecte de l'accès aux DLL de Windows.

Le chargement dynamique avait été emprunté par Microsoft aux ordinateurs VAX de DEC et a d'abord été utilisé pour des raisons d'efficacité pour son économie de mémoire en permettant le partage entre plusieurs applications ainsi que le chargement en mémoire à la demande des programmes.

Cela était surtout vrai à l'époque des Windows 16 bit, il y a donc bien longtemps, la mémoire de Windows utilisant un modèle segmenté : seul les segments contenant les DLLs utilisées étaient chargées en mémoire. A notre époque ce problème n'a plus vraiment cours car délégué à la gestion par pages de la mémoire virtuelle.

Les DLLs ont été ensuite utilisées pour étendre puis mettre à jour le système d'exploitation ainsi que les programmes les plus divers. Les plugins , les ActiveX et beaucoup d'autres objets d'extensions de Windows comme les Shell Extensions à la Gmail Drive ou les Browser Helper Objects ne sont que des utilisations avancées des DLLs

Enfin grace à des mécanismes comme les DLL Injections , l'utilisation des DLLs a souvent été détournée de leur utilisation standard au profit de virus et autres malwares

De la même manière que les DLL étendent le système d'exploitation elle peuvent étendre Internet Explorer ou Firefox et vous savez quoi ? votre Google toolbar pour Internet Explorer est une DLL ...


Pour en savoir plus sur les DLL voir chez Microsoft (attention à la traduction automatique)
et pour les développeurs sur le MSDN Dynamic-Link Libraries (Windows)

Libellés : , , , ,