Was ist das DLL-Dateiformat?
Dateien mit der Erweiterung .dll enthalten dynamisch verknüpfte Bibliotheken, die innerhalb von Microsoft Windows gemeinsam genutzt werden. Das .dll-Format verwendet dieselbe Binärstruktur wie .exe-Dateien - das Portable-Executable-(PE-)Format, erkennbar an den MZ-Magic-Bytes an Offset 0 und einer PE\0\0-Signatur, auf die der DOS-Stub-Header verweist - aber anders als eine ausführbare Datei kann eine .dll nicht direkt gestartet werden; sie muss von einem Host-Prozess geladen werden.
Alle Daten in einer .dll können in den Speicher geladen und gleichzeitig von mehreren Programmen verwendet werden. Bibliotheken enthalten typischerweise ActiveX-Steuerelemente, Systemsteuerungs-Applets, Gerätetreiber oder Symbol- und Schriftressourcen - obwohl Dateien, die diese letzteren Rollen erfüllen, oft andere Erweiterungen tragen, wie .ocx für COM-Komponenten oder .sys für Kernel-Modus-Treiber. Sie werden auch als modulare Komponenten größerer Anwendungen eingesetzt und liefern spezifische Funktionen als Plugins.
Bibliotheken können enthalten:
- Code für Unterprogramme, Funktionen und Plugins
- Daten, einschließlich Grafiken und Zeichenkettentabellen
- Zugehörige Ressourcen wie Menüs, Dialoge und Versionsinformationen
Die Spezifikation des .dll-Formats ist dieselbe wie die von .exe-Dateien - beide verwenden den PE-(oder PE32+ auf 64-Bit-Windows-)Container - die Bibliothek stellt jedoch kein eigenständiges Programm dar. Innerhalb des aufrufenden Programms kann ein Verweis auf eine Bibliothek und deren Laden so spät wie bei Bedarf erfolgen (Delay-Loading). Das .dll-Modell unterstützt modulare Anwendungsarchitektur, fördert die Wiederverwendung von Code-Fragmenten und reduziert sowohl den Speicherverbrauch als auch den Festplattenplatz. Verwaltete .dll-Dateien, die für .NET kompiliert wurden, tragen neben der Standard-PE-Struktur einen CLR-Header, der MSIL-Bytecode anstelle von nativem Maschinencode enthält.
Sicherheit
RISIKO: HIGHDLLs sind ausführbarer Code, und Malware liebt sie: Böswillige DLLs laufen innerhalb legitimer Prozesse (DLL-Hijacking/Sideloading - eine gefälschte DLL dort platzieren, wo eine App zuerst sucht), und „DLL-Reparatur“-Download-Seiten sind ein klassischer Malware- und Betrugskanal. Regeln: Laden Sie niemals einzelne DLLs von „DLL-Download“-Websites Dritter herunter; beheben Sie fehlende-DLL-Fehler durch Neuinstallation der App, Installation des offiziellen Visual C++ Redistributable / DirectX-Laufzeitprogramms oder Ausführen von sfc /scannow; prüfen Sie die digitale Signatur unbekannter DLLs (Eigenschaften → Digitale Signaturen) und scannen Sie sie auf VirusTotal. Das Löschen zufälliger DLLs aus System32 beschädigt Windows.
Formatdetails
kurz gefasstProgramme zum Öffnen von DLL-Dateien
Technische Details
technische Spezifikation| Binärformat | PE (Portable Executable) auf 32-Bit-Windows; PE32+ auf 64-Bit-Windows - gleiche Containerstruktur wie .exe |
| Magic Bytes | 4D 5A („MZ“) an Offset 0; „PE\0\0“ (50 45 00 00) an dem im DOS-Stub-Feld e_lfanew (0x3C) gespeicherten Offset |
| DLL-Identifikationsflag | IMAGE_FILE_DLL-Bit (0x2000) im COFF-Characteristics-Feld unterscheidet eine DLL von einer EXE innerhalb desselben PE-Containers |
| MIME-Typ | application/vnd.microsoft.portable-executable |
| Export-Mechanismus | Export Directory Table listet Funktionen nach Name und/oder Ordinalzahl auf; Aufrufer lösen Laufzeitadressen über die Export Address Table (EAT) auf |
| Import-Mechanismus | Import Directory Table deklariert benötigte DLLs und Funktionsnamen oder Ordinalzahlen; der Windows-Loader patcht die Import Address Table (IAT) zur Ladezeit |
| Verknüpfungsmodi | Implizite (Ladezeit-)Verknüpfung über einen Import-.lib-Stub oder explizite (Laufzeit-)Verknüpfung über LoadLibrary() und GetProcAddress() |
| ASLR und Relokation | .reloc-Sektion enthält eine Basis-Relokationstabelle; Windows ASLR randomisiert die tatsächliche Ladeadresse zur Laufzeit und überschreibt die bevorzugte ImageBase im optionalen PE-Header |
| Häufige Sektionen | .text (ausführbarer Code), .data (initialisierte Daten), .rdata (schreibgeschützte Daten und Importe), .rsrc (Ressourcen), .reloc (Basis-Relokationen) |
| Eingebettete Ressourcen | .rsrc-Sektion speichert typisierte Ressourcen - RT_ICON, RT_DIALOG, RT_STRING, RT_VERSION, RT_MANIFEST - ansehbar und bearbeitbar mit Tools wie Resource Hacker |
| Architektur-Builds | Jede Ziel-CPU (x86, x64, ARM, ARM64) erfordert eine separate DLL-Binärdatei; keine Fat-Binary-Unterstützung im Gegensatz zu macOS dylib |
| Verwaltete .NET-DLLs | CLR-kompilierte DLLs enthalten einen IMAGE_COR20_HEADER, der auf MSIL/CIL-Bytecode statt auf nativen Maschinencode verweist; mit ILSpy oder dotPeek dekompilierbar |
| Side-by-Side-Assemblys | Windows XP+ WinSxS erlaubt das Koexistieren mehrerer Versionen derselben DLL auf einem Rechner, gesteuert durch Anwendungsmanifestdateien |
| Einstiegspunkt | Optionale DllMain()-Funktion, die vom Loader bei vier Ereignissen aufgerufen wird: DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_DETACH |
| Delay-Load | /DELAYLOAD-Linkeroption verzögert das DLL-Laden bis zum ersten Aufruf einer ihrer exportierten Funktionen, was die Prozessstartzeit verkürzt |
| Veröffentlicht | 1985 (Windows 1.0, NE format); current PE format since Windows NT 3.1, 1993 |
| Offener Standard | Ja · lizenzgebührenfrei |
| Spezifikation | learn.microsoft.com |