Sezione

Indirizzi Base Registri Interni
Area Comunicazione BIOS Funzioni BIOS Funzioni DOS
Prefazione Capitolo 1 Capitolo 2 Schede
Libreria ASM Libreria MAC Palestra Progetti ASM
Info Download INDICE

Schede del Tutorial

Home » Programma il Computer » Tutorial Assembly

Le Schede del Tutorial

  Struttura dell'Header dei Files EXE

SCHEDA n° 01 [ 3  di 4] 

    

    Descrizione dell'Header - Informazioni di Controllo
     
bullet I primi 29 bytes 00000000 (il primo byte del file) e l'offset 0000001C) descrivono le singole voci di questa parte; riportiamo per comodità i primi 32 bytes di ogni file  EXE e cerchiamo di chiarire il loro significato:

     

00000000:4D 5A 0E 01 02 00 00 00
00000008:20 00 00 00 FF FF 00 00
00000010:00 00 31 08 00 01 00 00
00000018:1E 00 00 00 01 00 00 00
00000000:4D 5A 19 01 02 00 00 00
00000008:20 00 00 00 FF FF 00 00
00000010:00 00 8A E1 00 01 00 00
00000018:1E 00 00 00 01 00 00 00

      

bulletoffset 0000, byte,   4D (DB   4DH)   4D (DB   4DH)
offset
0001, byte,   5A (DB   5AH)   5A (DB   5AH), Signature 
Nella presentazione abbiamo già anticipato lo scopo di questa piccola stringa (MZ): solo se è presente il caricatore del Dos capisce che si tratta di un file EXE (altrimenti lo tratta come COM, anche se ha estensione EXE). Per la cronaca le lettere sono le iniziali di Mark Zbikowski, veterano programmatore Microsoft.
bulletoffset 0002, word,0E 01 (DW 010EH),19 01 (DW 0119H), LastPageSize 
Indica la lunghezza dell'ultima pagina del file, in pratica il numero ottenuto come resto dividendo per 512 (pagina) la dimensione del file. Nei nostri 2 casi vale rispettivamente 270 e 281; data la piccola dimensione dei sorgenti, levando i 256 bytes previsti per il PSP, i numeri ottenuti, 1426, rappresentano l'esatta dimensione del codice macchina.
bulletoffset 0004, word,02 00 (DW 0002H),02 00 (DW 0002H), PageCount 
Esprime il numero di pagine (zone da 512 bytes) previste per il nostro EXE (header e modulo caricabile); nei nostri esempi ne servono 2, anche se la seconda sarà utilizzata solo parzialmente.
bulletoffset 0006, word,00 00 (DW 0000H),00 00 (DW 0000H), RelocationRecords 
Indica al
loader il numero elementi da rilocare presenti nella tabella di rilocazione; i nostri EXE non hanno elementi. 
bulletoffset 0008, word,20 00 (DW 0020H),20 00 (DW 0020H), HeaderParagraphs 
Comunica al loader la lunghezza dell'intestazione (header) espressa in paragrafi (aree da 16 bytes); con questa informazione è possibile localizzare con certezza l'inizio del programma (modulo caricabile). Il dato letto nei nostri EXE è di 32 paragrafi, pari a 512 bytes. Per consentire il funzionamento del debugger sarebbe opportuno prevedere un numero multiplo di 512 in questa posizione, anche se ai fili del caricamento in memoria (loader) basta che sia multiplo di 16.
bulletoffset 000A, word,00 00 (DW 0000H),00 00 (DW 0000H), MinimunAllocation 
Esprime il numero di paragrafi (gruppi di 16 bytes) necessari sopra il programma caricato, perchè possa funzionare correttamente.
bulletoffset 000C, word,FF FF (DW FFFFH),FF FF (DW FFFFH), MaximunAllocation 
Esprime il numero di paragrafi (gruppi di 16 bytes) da fornire al programma al momento del caricamento; in entrambi i nostri casi la memoria allocata è di 1 gigaByte (65536*16), anche se poi, in realtà l'effettiva quantità dipende dal numero di segmenti liberi.
bulletoffset 000E, word,00 00 (DW 0000H),00 00 (DW 0000H), InitialSS 
offset 0010, word,00 00 (DW 0000H),00 00 (DW 0000H), InitialSP 
Indica il valore del puntatore SS:SP al momento del caricamento; naturalmente il valore della parte segment (da copiare in SS) sarà corretto dalla rilocazione, sommando a InitialSS il valore del segmento in cui è caricato il programma: la parte offset (InitialSP) non è invece riferita al segmento e perciò non deve essere rilocata e sarà copiata così com'è in SP.
bulletoffset 0012, word,31 08 (DW 4000H),8A E1 (DW E18AH), CheckSum
Numero usato dal Linker come parola di controllo (Checksum)  ottenuto sommando il valore di tutte le word del file, ignorando l'overflow.
bulletoffset 0014, word,00 01 (DW 0100H),00 01 (DW 0100H), InitialIP 
offset 0016, word,00 00 (DW 0000H),00 00 (DW 0000H), InitialCS
Indica il valore del puntatore CS:IP al momento del caricamento; naturalmente il valore della parte segment (da copiare in CS) sarà corretto dalla rilocazione, sommando a InitialCS il valore del segmento in cui è caricato il programma: la parte offset (InitialIP) non è invece riferita al segmento e perciò non deve essere rilocata e sarà copiata così com'è in IP.
bulletoffset 0018, word,1E 00 (DW 001EH),1E 00 (DW 001EH), StartOfRelocationTable 
Indirizzo della prima voce della tabella di rilocazione. 
bulletoffset 001A, word,00 00 (DW 0000H),00 00 (DW 0000H), OverlayNumber 
Numero degli eventuali overlay.

    

Pagina Precedente Scheda n° 01 Pagina Successiva Struttura dell'Header dei Files EXE Torna al Menu delle Schede del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
Scheda n° 01 -  3
1 2 3 4

    

SCHEDE » 1.Header EXE 2.PseudoOp MASM 3.Differenza tra Macro e Procedure
4.
Tabella Vettori 5.PSP 6.Stack 7.Istruzioni 80x86
8.La misura dell'Informazione 9.Numeri e Logica Binaria
TUTORIAL » Indirizzi Base | Registri Interni | Area Comunicaz. BIOS | Funzioni BIOS | Funzioni DOS
Prefazione | CAP 1 | CAP 2 | Schede | Palestra
Libreria ASM | Libreria MAC | Progetti ASM | Download | Info | Indice
Home 
Pascal|Manuali|Tabelle|Schede
Tutorial Assembly|Palestra Assembler
Aggiungi Giobe®2000 ai preferiti  
Motore
Ricerca
  Rendi Giobe®2000 pagina di Default
© 2001-2010  -  Studio Tecnico ing. Giorgio OBER
Tutti i diritti sono riservati