Utente:Kormoran/Sandbox
Da Wikipedia, l'enciclopedia libera.
Il Linear Executable, abbreviato in LE è un formato di file per codice eseguibile sviluppato da Microsoft per i driver di periferica dei suoi sistemi operativi Windows, e supporta solo codice a 32 bit in modalità protetta. Esordì con Windows 95 (era il formato dei driver .VXD) ed è usato da allora in tutti i suoi sistemi operativi, Windows Vista compreso.
Come tutti i formati eseguibili Microsoft il Portable Executable si compone di uno stub MS-DOS 2.0, in sè un completo, seppur minimale, programma DOS in modo testo e di un secondo header specifico (il vero header LE) e del codice e dei dati veri e propri. Lo stub DOS ha due funzioni:
- specificare, in un campo specifico dell'header DOS, la posizione di inizio dell'header LE;
- mostrare a video un messaggio di errore nel caso il file venga lanciato in un ambiente DOS invece che in Windows.
Inizio del file | 00h | valign="top">Header MS-DOS |
20h | Riservato | |
3Ch | offset header LE | |
40h | stub MS-DOS | |
Inizio header `LE` | ... | |
... | ||
... |
Il loader di Windows legge dallo stub la posizione di inizio dell'header LE e salta direttamente a questo, verifica che all'inizio dell'header sia presente la stringa "LE" (o "LX") e se la trova prosegue da lì le operazioni di caricamento, presumendo di avere a che fare con un file Linear Executable valido. Oltre all'header principale ve ne sono altri secondari, che specificano informazioni accessorie.
Struttura dell'header LE:
Beginning of `LE` header | Information block |
Object table | |
Object page map table | |
Object iterate data map table | |
Resource table | |
Resident-names table | |
Entry table | |
Module directives table | |
Fix-up page table | |
Fix-up record table | |
Imported modules name table | |
Imported procedures name table | |
Per-page checksum table | |
Code and data segments | Code or Data Segment 1 |
Code or Data Segment 2 | |
... | |
... | |
... | |
Code or Data Segment n | |
Nonresident_Table">Non-resident table | |
End of file |