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 : développement, hacking, histoire informatique, Microsoft, Windows