Biblioteca de linkuri dinamice

Biblioteca de linkuri dinamice Caracteristici
Extensie .dll
Tip MIME application/vnd.microsoft.portable-executable, application/x-msdownload
Dezvoltat de IBM și Microsoft
Tipul formatului Biblioteca software

O bibliotecă de legături dinamice (în franceză, bibliotecă de legături dinamice ) este o bibliotecă software ale cărei funcții sunt încărcate în memorie de un program, dacă este necesar, în timpul executării sale, spre deosebire de bibliotecile software statice sau partajate ale căror funcții sunt încărcate în memorie înainte de început de execuție a programului.

.dll este o extensie de nume de fișier utilizată de fișierele care conțin o bibliotecă de legături dinamice .

Aceste biblioteci software au fost inventate în Multics în 1964 și au existat în Windows din 1985. Ele formează o bază a sistemelor de operare Windows și sunt utilizate pentru programarea interfețelor , driverelor , widgeturilor și fonturilor .

Operațiune

Un program de calculator este construit dintr-un set de fișiere sursă care conțin funcții . Bibliotecile software sunt pachete de funcții stocate în fișiere. O bibliotecă software conține de obicei un set de funcții în jurul aceluiași subiect. Prin această tehnică, o modificare ulterioară a uneia dintre funcțiile bibliotecii necesită recrearea acesteia, fără a fi necesară recreerea întregii aplicații.

Această tehnică necesită ca fișierele de bibliotecă să fie încărcate în memorie în același timp cu programul care le folosește, după care un program - linkerul - face aplicația operațională prin țeserea legăturilor între diferitele fișiere.

Bibliotecile software pot fi:

O bibliotecă statică este încorporată într-un program, iar conectarea se face în timpul construcției sale. Când se schimbă o bibliotecă statică, fiecare program care o folosește trebuie reconstruit pentru a încorpora modificările;

O bibliotecă partajată nu este încorporată în programele care o utilizează, ci este legată de acele programe atunci când sunt încărcate, adică imediat înainte de executarea programului. O bibliotecă partajată poate fi utilizată de multe programe, iar schimbarea bibliotecii nu necesită reconstruirea programelor, atâta timp cât interfața de programare a bibliotecii nu se modifică;

Bibliotecile dinamice sunt la fel ca bibliotecile partajate, dar sunt utilizate într-un mod diferit. Astfel de biblioteci sunt legate de aplicație atunci când aceasta din urmă are nevoie de ele. Programele care le folosesc includ instrucțiuni pentru încărcare și conectare.

În tehnica de legare dinamică utilizată de DLL-uri, operația de legare se realizează în două etape: mai întâi, la construirea aplicației, linkerul creează conectori, apoi la încărcare - imediat înainte de a rula aplicația - conectorii sunt conectați între ei. DLL-urile sunt în format COFF , utilizate și în IBM AIX .

În Windows

DLL-urile sunt una dintre bazele sistemelor de operare Windows . Funcțiile interne ale Windows sunt puse la dispoziția programelor prin programarea interfețelor implementate de fișierele DLL. Cele trei biblioteci principale sunt User32.dll (manipularea interfeței cu utilizatorul), GDI32.dll (manipularea dispozitivelor de imprimare și afișare) și Kernel32.dll (utilizarea funcțiilor kernel-ului Windows referitoare la fișiere și proces). Alte fișiere Windows utilizate adesea în programare sunt comdlg32.dll , MAPI32.dll , netapi32.dll și winmm.dll . Fișierele DLL sunt, de asemenea, utilizate pentru multe extensii: drivere , dialoguri , widgeturi , fonturi .

Windows oferă posibilitatea deturnării sau furtului funcțiilor DLL-urilor. În plus față de motive legitime, aceste posibilități sunt exploatate de rootkit-uri , care injectează funcționalitate fără știrea utilizatorului prin furtul DLL-urilor sistemului de operare.

Programare

Limbi precum C , C ++ sau Delphi sunt capabile să creeze DLL-uri care pot fi exploatate de programe. Multe instrumente de dezvoltare care oferă biblioteci de execuție precum Microsoft Foundation Class Library (MFC) sau Borland Visual Component Library (VCL) oferă fie o legătură statică (integrarea directă a codului în executabil), fie o legătură dinamică (biblioteca trebuie apoi să fie distribuite sub forma unui DLL).

Utilizarea DLL face posibilă punerea la dispoziție a codului și modificarea arhitecturii unei aplicații. Actualizarea acestui lucru se poate face și prin înlocuirea numai a DLL-urilor învechite. Cu toate acestea, utilizarea mai multor versiuni simultane de DLL este problematică în Windows și duce la anumite incompatibilități grupate sub termenul DLL Hell .

DLL hell - DLL hell

Construirea DLL-urilor facilitează înlocuirea acestora pentru a adăuga funcții noi și a le îmbunătăți pe cele existente. Cu toate acestea, se poate întâmpla ca înlocuirea să conducă la modificări aprofundate ale funcțiilor existente, ceea ce duce la defecțiuni și funcționarea incorectă a programelor care o utilizează. În plus, DLL-urile realizate cu un compilator tind să fie incompatibile cu executabilele realizate cu un alt compilator.

Este o cauză cunoscută a apelurilor către servicii tehnice care au botezat acest fenomen DLL hell , „iadul DLL” în engleză.

Când lipsește un fișier DLL pe computerul utilizatorului, lansarea unui program care îl folosește va provoca un mesaj DLL Not Found care nu este de niciun folos utilizatorului. Dacă DLL există, dar nu este valid pentru program, atunci programul nu are nicio modalitate de a-l verifica, ceea ce poate provoca mesaje de eroare DynaLink sau chiar bloca programul. Una dintre cauzele unor astfel de probleme este că Windows nu oferă un mecanism intern de control al versiunilor - un mecanism care asigură că un program va fi asociat cu biblioteca pentru care a fost construit.

Unul dintre modurile în care programatorii pot lupta iadul DLL este de a încărca în mod explicit fișierul DLL: în loc să fie încărcat automat fișierul la pornirea programului care îl folosește, programul folosește funcția LoadLibrary, care încarcă fișierul în care există. Principala diferență între această metodă și metoda clasică este că executabilul nu știe din timp adresele funcțiilor de care va avea nevoie.

O altă modalitate este de a copia tot sau o parte din codul sursă al DLL în cel al viitorului executabil pentru a face fără DLL-ul menționat. Totuși, acest lucru poate fi ilegal (adesea din cauza licențelor incompatibile) sau imposibil din punct de vedere tehnic (de obicei, deoarece codul sursă al DLL nu este disponibil), dar, chiar și atunci când este posibil și legal, rămâne în general exclus din cauza utilizărilor .

Note și referințe

  1. "  DLL în Visual C ++  " pe MSDN , Microsoft (accesat la 1 st noiembrie 2014 )
  2. „  Glosar DLL  ” , pe Symantec (accesat la 31 octombrie 2014 )
  3. „  Tutorial pentru crearea și utilizarea unei biblioteci dinamice (dll)  ” [PDF] , pe ISIMA (accesat la 31 octombrie 2014 )
  4. „  Definiția DLL și funcționarea unui fișier DLL  ” , pe file-dll.fr (accesat la 31 octombrie 2014 )
  5. (în) InfoWorld , 23 mai 1988 ( ISSN  0199-6649 ) .
  6. (en) IA Dhotre - AA Puntambekar, Programare sisteme , Publicații tehnice - 2008 ( ISBN  9788184313925 ) .
  7. (en) Sibsankar Haldar - Alex Alagarsamy Aravind, Operating Systems , Pearson Education India - 2010 ( ISBN  9788131730225 ) .
  8. (ro) Joseph A. Fisher - Paolo Faraboschi - Clifford Young, Embedded Computing: A Vliw Approach To Architecture, Compilers And Tools , Elsevier - 2005, ( ISBN  9781558607668 ) .
  9. (ro) John Calcote, Autotools: A Practitioner's Guide to GNU Autoconf, Automake, and Libtool , No Starch Press - 2010 ( ISBN  9781593272067 ) .
  10. Greg Perry, Visual Basic 6 , Pearson Education France ( ISBN  9782744040825 ) .
  11. (în) Marco Cantu, Mastering Delphi 6 , John Wiley & Sons - 2006 ( ISBN  9780782152784 ) .
  12. (ro) Greg. Hoglund - James Butler, Rootkits: Subverting Windows Kernel , Addison-Wesley Professional - 2006 ( ISBN  9780321294319 ) .
  13. (în) Kate Gregory, Microsoft Visual C ++ .NET 2003 Kick Start , Editura Sams - 2004 ( ISBN  9780672326004 ) .
  14. (în) Mark A. DeLoura, Game Programming Gems 2 , Cengage Learning - 2001 ( ISBN  9781584500544 ) .

Vezi și tu

Bibliografie

linkuri externe