Vad är filformatet DLL?
Filer med filändelsen .dll innehåller dynamiskt länkade bibliotek som delas inom Microsoft Windows. Formatet .dll använder samma binära struktur som .exe-filer - Portable Executable (PE)-formatet, identifierat av MZ magic bytes vid offset 0 och en PE\0\0-signatur som pekas ut av DOS-stub-headern - men till skillnad från en körbar fil kan en .dll inte startas direkt; den måste läsas in av en värdprocess.
All data i en .dll kan läsas in i minnet och användas av flera program samtidigt. Bibliotek innehåller vanligtvis ActiveX-kontroller, kontrollpanelstillägg, enhetsdrivrutiner eller ikon- och typsnittsresurser - även om filer som tjänar de sistnämnda rollerna ofta har andra filändelser som .ocx för COM-komponenter eller .sys för drivrutiner i kernelläge. De används också som modulära komponenter i större applikationer för att leverera specifika funktioner som insticksmoduler.
Bibliotek kan innehålla:
- Kod för underprogram, funktioner och insticksmoduler
- Data, inklusive grafik och strängtabeller
- Associerade resurser såsom menyer, dialogrutor och versionsinformation
Specifikationen för .dll-formatet är densamma som för .exe-filer - båda använder PE-containern (eller PE32+ på 64-bitars Windows) - biblioteket utgör dock inte ett fristående program. Inom det anropande programmet kan en referens till ett bibliotek och dess inläsning utföras så sent som när den behövs (fördröjd inläsning). .dll-modellen stöder modulär applikationsarkitektur, uppmuntrar återanvändning av kodfragment och minskar både minnesanvändning och diskutrymme. Hanterade .dll-filer kompilerade för .NET bär en CLR-header tillsammans med standard PE-strukturen, innehållande MSIL-bytecode istället för inbyggd maskinkod.
Säkerhet & trygghet
RISK: HIGHDLL-filer är körbar kod och skadlig kod älskar dem: skadliga DLL-filer körs inuti legitima processer (DLL-kapning/sideloading - att placera en falsk DLL där en app letar först), och webbplatser för «DLL-fixare» är en klassisk kanal för skadlig kod och bedrägerier. Regler: ladda aldrig ner enskilda DLL-filer från tredjepartswebbplatser; åtgärda fel om saknade DLL-filer genom att installera om appen, installera officiella Visual C++ Redistributable / DirectX runtime, eller kör sfc /scannow; kontrollera okända DLL-filers digitala signatur (Egenskaper → Digitala signaturer) och skanna dem på VirusTotal. Att radera slumpmässiga DLL-filer från System32 förstör Windows.
Formatdetaljer
i ett nötskalProgram som öppnar DLL-filer
Tekniska detaljer
djup specifikation| Binärt format | PE (Portable Executable) på 32-bitars Windows; PE32+ på 64-bitars Windows - samma containerstruktur som .exe |
| Magic bytes | 4D 5A («MZ») vid offset 0; «PE\0\0» (50 45 00 00) vid offset lagrad i DOS-stub-fältet e_lfanew (0x3C) |
| DLL-identifieringsflagga | IMAGE_FILE_DLL-biten (0x2000) i COFF Characteristics-fältet skiljer en DLL från en EXE inom samma PE-container |
| MIME-typ | application/vnd.microsoft.portable-executable |
| Exportmekanism | Export Directory Table listar funktioner efter namn och/eller ordningsnummer; anropare löser körtidsadresser via Export Address Table (EAT) |
| Importmekanism | Import Directory Table deklarerar nödvändiga DLL:er och funktionsnamn eller ordningstal; Windows-laddaren patchar Import Address Table (IAT) vid inläsning |
| Länkningslägen | Implicit länkning (vid inläsning) via en import .lib-stub, eller explicit länkning (vid körning) via LoadLibrary() och GetProcAddress() |
| ASLR och relokering | .reloc-sektionen innehåller en basrelokeringstabell; Windows ASLR randomiserar den faktiska inläsningsadressen vid körning, vilket åsidosätter föredragen ImageBase i PE optional header |
| Vanliga sektioner | .text (körbar kod), .data (initierad data), .rdata (skrivskyddad data och importer), .rsrc (resurser), .reloc (basrelokeringar) |
| Inbäddade resurser | .rsrc-sektionen lagrar typade resurser - RT_ICON, RT_DIALOG, RT_STRING, RT_VERSION, RT_MANIFEST - som kan visas och redigeras med verktyg som Resource Hacker |
| Arkitekturbyggen | Varje mål-CPU (x86, x64, ARM, ARM64) kräver en separat DLL-binär; inget stöd för fat-binaries till skillnad från macOS dylib |
| Hanterade .NET-DLL:er | CLR-kompilerade DLL:er bäddar in en IMAGE_COR20_HEADER som pekar på MSIL/CIL-bytecode snarare än inbyggd maskinkod; dekompilerbara med ILSpy eller dotPeek |
| Side-by-side-assemblies | Windows XP+ WinSxS tillåter flera versioner av samma DLL att samexistera på en maskin, styrt av applikationsmanifestfiler |
| Startpunkt | Valfri DllMain()-funktion som anropas av laddaren vid fyra händelser: DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_DETACH |
| Fördröjd inläsning | /DELAYLOAD-länkaralternativet skjuter upp DLL-inläsning till det första anropet till en av dess exporterade funktioner, vilket minskar processtarttiden |
| Släppt | 1985 (Windows 1.0, NE format); current PE format since Windows NT 3.1, 1993 |
| Öppen standard | Ja · royaltyfri |
| Specifikation | learn.microsoft.com |