Che cos'è il formato di file DLL?
I file con estensione .dll contengono librerie collegate dinamicamente condivise all'interno di Microsoft Windows. Il formato .dll utilizza la stessa struttura binaria dei file .exe - il formato Portable Executable (PE), identificato dai magic bytes MZ all'offset 0 e da una firma PE\0\0 indicata dall'intestazione stub DOS - ma a differenza di un eseguibile, una .dll non può essere lanciata direttamente; deve essere caricata da un processo ospite.
Tutti i dati in una .dll possono essere caricati in memoria e utilizzati da più programmi simultaneamente. Le librerie in genere contengono controlli ActiveX, applet del pannello di controllo, driver di dispositivo o risorse di icone e caratteri - sebbene i file che svolgono questi ultimi ruoli spesso portino estensioni diverse come .ocx per i componenti COM o .sys per i driver in modalità kernel. Vengono anche utilizzate come componenti modulari di applicazioni più grandi, fornendo funzioni specifiche come plugin.
Le librerie possono contenere:
- Codice per sottoprogrammi, funzioni e plugin
- Dati, inclusi grafici e tabelle di stringhe
- Risorse associate come menu, finestre di dialogo e informazioni sulla versione
Le specifiche del formato .dll sono le stesse dei file .exe - entrambi utilizzano il contenitore PE (o PE32+ su Windows a 64 bit) - tuttavia, la libreria non costituisce un programma autonomo. All'interno del programma chiamante, il riferimento a una libreria e il suo caricamento possono essere eseguiti solo quando necessario (caricamento ritardato). Il modello .dll supporta l'architettura applicativa modulare, incoraggia il riutilizzo di frammenti di codice e riduce sia l'utilizzo della memoria che lo spazio su disco. I file .dll gestiti compilati per .NET portano un'intestazione CLR insieme alla struttura PE standard, contenente bytecode MSIL invece del codice macchina nativo.
Sicurezza e incolumità
RISCHIO: HIGHLe DLL sono codice eseguibile e i malware le sfruttano spesso: le DLL dannose vengono eseguite all'interno di processi legittimi (DLL hijacking/sideloading - inserendo una DLL malevola dove un'app cerca per prima), e i siti di download di «DLL fixer» sono un classico canale di malware e truffe. Regole: non scaricare mai singole DLL da siti di terze parti; correggi gli errori di DLL mancanti reinstallando l'app, installando il Visual C++ Redistributable / DirectX runtime ufficiale o eseguendo sfc /scannow; controlla la firma digitale delle DLL sconosciute (Proprietà → Firme digitali) e scansionale su VirusTotal. Eliminare DLL a caso da System32 compromette Windows.
Dettagli del formato
in sintesiProgrammi che aprono file DLL
Dettagli tecnici
specifiche approfondite| Formato binario | PE (Portable Executable) su Windows a 32 bit; PE32+ su Windows a 64 bit - stessa struttura del contenitore di .exe |
| Magic bytes | 4D 5A («MZ») all'offset 0; «PE\0\0» (50 45 00 00) all'offset memorizzato nel campo stub DOS e_lfanew (0x3C) |
| Flag identificativo DLL | Il bit IMAGE_FILE_DLL (0x2000) nel campo COFF Characteristics distingue una DLL da un EXE all'interno dello stesso contenitore PE |
| Tipo MIME | application/vnd.microsoft.portable-executable |
| Meccanismo di esportazione | La Export Directory Table elenca le funzioni per nome e/o numero ordinale; i chiamanti risolvono gli indirizzi runtime tramite la Export Address Table (EAT) |
| Meccanismo di importazione | La Import Directory Table dichiara le DLL richieste e i nomi o gli ordinali delle funzioni; il loader di Windows aggiorna la Import Address Table (IAT) al momento del caricamento |
| Modalità di collegamento | Collegamento implicito (load-time) tramite uno stub .lib di importazione, o collegamento esplicito (run-time) tramite LoadLibrary() e GetProcAddress() |
| ASLR e rilocazione | La sezione .reloc contiene una tabella di rilocazione di base; l'ASLR di Windows rende casuale l'indirizzo di caricamento effettivo al runtime, sovrascrivendo l'ImageBase preferito nell'intestazione opzionale PE |
| Sezioni comuni | .text (codice eseguibile), .data (dati inizializzati), .rdata (dati in sola lettura e importazioni), .rsrc (risorse), .reloc (rilocazioni di base) |
| Risorse incorporate | La sezione .rsrc memorizza risorse tipizzate - RT_ICON, RT_DIALOG, RT_STRING, RT_VERSION, RT_MANIFEST - visualizzabili e modificabili con strumenti come Resource Hacker |
| Build di architettura | Ogni CPU di destinazione (x86, x64, ARM, ARM64) richiede un binario DLL separato; nessun supporto per fat-binary a differenza di macOS dylib |
| DLL .NET gestite | Le DLL compilate con CLR incorporano un IMAGE_COR20_HEADER che punta al bytecode MSIL/CIL invece del codice macchina nativo; decompilabili con ILSpy o dotPeek |
| Side-by-side assemblies | WinSxS da Windows XP in poi consente la coesistenza di più versioni della stessa DLL su una macchina, gestita dai file manifest dell'applicazione |
| Punto di ingresso | Funzione opzionale DllMain() chiamata dal loader in quattro eventi: DLL_PROCESS_ATTACH, DLL_THREAD_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_DETACH |
| Caricamento ritardato | L'opzione del linker /DELAYLOAD posticipa il caricamento della DLL fino alla prima chiamata a una delle sue funzioni esportate, riducendo il tempo di avvio del processo |
| Rilasciato | 1985 (Windows 1.0, NE format); current PE format since Windows NT 3.1, 1993 |
| Standard aperto | Sì · royalty-free |
| Specifica | learn.microsoft.com |