Hva er DLL-filformatet?
Filer med filendelsen .dll inneholder dynamisk koblede biblioteker som deles i Microsoft Windows. Formatet .dll bruker samme binære struktur som .exe-filer - Portable Executable (PE)-formatet, identifisert av MZ magic bytes ved offset 0 og en PE\0\0-signatur som DOS-stub-headeren peker på - men i motsetning til en kjørbar fil, kan ikke en .dll startes direkte; den må lastes av en vertsprosess.
All data i en .dll kan lastes inn i minnet og brukes av flere programmer samtidig. Biblioteker inneholder vanligvis ActiveX-kontroller, kontrollpanel-applets, enhetsdrivere eller ikon- og fontressurser - selv om filer som tjener de sistnevnte rollene ofte har andre utvidelser som .ocx for COM-komponenter eller .sys for drivere i kjernemodus. De brukes også som modulære komponenter i større applikasjoner, og leverer spesifikke funksjoner som utvidelser (plugins).
Biblioteker kan inneholde:
- Kode for underprogrammer, funksjoner og utvidelser
- Data, inkludert grafikk og strengtabeller
- Tilknyttede ressurser som menyer, dialoger og versjonsinformasjon
Spesifikasjonen for .dll-formatet er den samme som for .exe-filer - begge bruker PE-beholderen (eller PE32+ på 64-bit Windows) - men biblioteket utgjør ikke et frittstående program. I det kallende programmet kan en referanse til et bibliotek og innlasting av dette utføres så sent som når det trengs (forsinket innlasting). .dll-modellen støtter modulær applikasjonsarkitektur, oppmuntrer til gjenbruk av kodefragmenter og reduserer både minnebruk og diskplass. Administrerte .dll-filer kompilert for .NET har en CLR-header ved siden av den standard PE-strukturen, som inneholder MSIL-bytekode i stedet for innebygd maskinkode.
Sikkerhet og trygghet
RISIKO: HIGHDLL-er er kjørbar kode, og skadevare elsker dem: ondsinnede DLL-er kjører inne i legitime prosesser (DLL-kapring/sideloading - plassering av en falsk DLL der en app søker først), og nettsteder for «DLL-fiksing» er en klassisk kanal for skadevare og svindel. Regler: last aldri ned individuelle DLL-er fra tredjeparts nettsteder; fiks feil med manglende DLL-er ved å installere appen på nytt, installere den offisielle Visual C++ Redistributable / DirectX runtime, eller kjøre sfc /scannow; sjekk ukjente DLL-ers digitale signatur (Egenskaper → Digitale signaturer) og skann dem på VirusTotal. Sletting av tilfeldige DLL-er fra System32 ødelegger Windows.
Formatdetaljer
i et nøtteskallProgrammer som åpner DLL-filer
Tekniske detaljer
dyp spesifikasjon| Binært format | PE (Portable Executable) på 32-bit Windows; PE32+ på 64-bit Windows - samme beholderstruktur som .exe |
| Magic bytes | 4D 5A («MZ») ved offset 0; «PE\0\0» (50 45 00 00) ved offset lagret i DOS-stub-feltet e_lfanew (0x3C) |
| DLL-identifikasjonsflagg | IMAGE_FILE_DLL-bit (0x2000) i COFF Characteristics-feltet skiller en DLL fra en EXE i samme PE-beholder |
| MIME-type | application/vnd.microsoft.portable-executable |
| Eksportmekanisme | Export Directory Table lister funksjoner etter navn og/eller ordinalnummer; kallere løser kjøretidsadresser via Export Address Table (EAT) |
| Importmekanisme | Import Directory Table deklarerer nødvendige DLL-er og funksjonsnavn eller ordinaler; Windows-lasteren patcher Import Address Table (IAT) ved innlasting |
| Koblingsmoduser | Implisitt (ved innlasting) kobling via en import .lib-stub, eller eksplisitt (ved kjøretid) kobling via LoadLibrary() og GetProcAddress() |
| ASLR og relokering | .reloc-seksjonen inneholder en baserelokeringstabell; Windows ASLR randomiserer den faktiske lastadressen ved kjøretid, og overstyrer foretrukket ImageBase i PE optional header |
| Vanlige seksjoner | .text (kjørbar kode), .data (initialisert data), .rdata (skrivebeskyttet data og importer), .rsrc (ressurser), .reloc (baserelokeringer) |
| Innebygde ressurser | .rsrc-seksjonen lagrer typede ressurser - RT_ICON, RT_DIALOG, RT_STRING, RT_VERSION, RT_MANIFEST - som kan vises og redigeres med verktøy som Resource Hacker |
| Arkitekturbygg | Hver mål-CPU (x86, x64, ARM, ARM64) krever en separat DLL-binærfil; ingen støtte for «fat-binaries» i motsetning til macOS dylib |
| Administrerte .NET DLL-er | CLR-kompilerte DLL-er bygger inn en IMAGE_COR20_HEADER som peker til MSIL/CIL-bytekode i stedet for innebygd maskinkode; kan dekompileres med ILSpy eller dotPeek |
| Side-by-side assemblies | Windows XP+ WinSxS tillater flere versjoner av samme DLL å eksistere side om side på én maskin, styrt av applikasjonsmanifestfiler |
| Startpunkt | Valgfri DllMain()-funksjon som kalles av lasteren ved fire hendelser: DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_DETACH |
| Forsinket innlasting | /DELAYLOAD-koblingsvalg utsetter DLL-innlasting til det første kallet til en av dens eksporterte funksjoner, noe som reduserer oppstartstiden for prosessen |
| Utgitt | 1985 (Windows 1.0, NE format); current PE format since Windows NT 3.1, 1993 |
| Åpen standard | Ja · royalty-fri |
| Spesifikasjon | learn.microsoft.com |