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

Capitolo 2

Home » Programma il Computer » Tutorial Assembly

Capitolo 2 - Gli strumenti di lavoro

  Gli strumenti di Lavoro

LINKER 7/10 [43 di 87] 

    

    Come è fatto il file EXE? 
     
bulletIl file EXE è il prodotto del Linker e contiene dentro di sé tutte le informazioni necessarie al loader del Dos per allocare il programma in memoria e al processore per eseguirlo.
bulletDunque, nonostante l'apparenza, non si tratta di un file già pronto all'esecuzione; il sistema operativo deve intervenire per caricare (rilocare) le sue parti componenti (segmenti) nella giusta posizione in memoria Ram, anche in funzione delle reali disponibilità di questa risorsa.
bulletSi tratta di un compito molto impegnativo e complesso (per fortuna a noi completamente trasparente) svolto con l'indispensabile aiuto dei bytes dell'intestazione (header) predisposta dal Linker davanti all'effettivo codice macchina (modulo caricabile) del programma.

      

Ricorda... Data la rilevanza di questa struttura è stata predisposta una scheda che ne svela tutti i segreti!

      

bulletL'intestazione occupa almeno 512 bytes del programma EXE ed è costituita da 2 parti: nella prima (Informazioni di controllo) sono fornite indicazioni utili per la messa a punto del programma (come i valori da mettere nei registri del processore) mentre nella seconda (Tabella di Rilocazione) ci sono i puntatori alle variabili e agli indirizzi importanti del programma, che devono essere adattati alla effettiva posizione in ram.
bulletEsistono numerose utility in grado di mettere in chiaro i bytes di ques'area, come ExeMod e ExeHdr (usate nella citata scheda).
bulletPer levarci la curiosità di vedere il valore dei 782 bytes di Prova.EXE e dei 793 bytes di Prova1.EXE abbiamo utilizzato il programma DiskEdit:

      

C:\ARCH-LAB\LAVORO> diskedit prova.exe
----------------------------------------------------------
00000000: 4D 5A 0E 01 02 00 00 00 20 00 00 00 FF FF 00 00
00000010: 00 00 31 08 00 01 00 00 1E 00 00 00 01 00 00 00
 omissis < da 00000020: a 000002FF: tutti bytes a 00 >
00000300: B4 00 B0 03 CD 10 B4 00 CD 16 B4 4C CD 21 

    

C:\ARCH-LAB\LAVORO> diskedit prova1.exe
----------------------------------------------------------
00000000: 4D 5A 19 01 02 00 00 00 20 00 00 00 FF FF 00 00
00000010: 00 00 8A E1 00 01 00 00 1E 00 00 00 01 00 00 00
 omissis < da 00000020: a 000002FF: tutti bytes a 00 >
00000300: EB 0D 90 B4 00 CD 16 C3 B4 00 B0 03 CD 10 C3 E8
00000310: F6 FF E8 EE FF B4 4C CD 21

    

NOTA: il programma DiskEdit è una tipica applicazione Dos e non può essere eseguito nell'ambiente multitasking di Windows; per questo bisogna chiudere sessione riavviando il sistema in modalità DOS.
Per i vecchi lupi c'è però un trucco per evitare tutto questo traffico: basta fare una copia del programma EXE con una estensione qualunque (per esempio Prova.XXX) e poi caricarlo in memoria con il comando Debug Prova.XXX confermato da Invio. L'indagine con -D 100 mette in evidenza il contenuto esadecimale del file eseguibile esattamente come DiskEdit!

      

bulletVediamo di analizzare i bytes rilevati da DiskEdit; per evitare inutile spreco di spazio il resoconto mostra i 782 bytes di Prova.EXE e i 793 bytes di Prova1.EXE senza i 736 bytes centrali, tutti di valore 00H:
bulleti primi 29 sono le voci delle Informazioni di Controllo dell'Header; occupano lo spazio compreso tra l'offset 00000000 (il primo byte del file) e l'offset 0000001C.
bulleti successivi (di solito al netto dei 512 bytes, cioè nello spazio compreso tra gli offset 0000001E e 000001FF, ma talvolta anche di più) costituiscono la vera e propria Tabella di Rilocazione.
bulleti rimanenti bytes sono destinati al modulo caricabile, codice macchina dell'eseguibile e le sue eventuali zone dati e stack.
bulletvale la pena osservare che, in entrambe le tabelle, la zona destinata al programma parte dall'offset 00000200 anche se i bytes del codice macchina sono visibili solo dall'offset 00000300: i 256 bytes compresi in quest'area saranno scritti dal DOS nella fase di caricamento del file EXE in memoria e sono noti come Prefisso del Segmento di Programma.

      

Ricorda... Dunque: rispettivamente solo 14 e 26 bytes (su 782 e 793) sono codice macchina, per altro gli unici presenti nell'eventuale versione COM, ottenuta per intercessione di Exe2Bin.

    

Pagina Precedente Capitolo 2 Pagina Successiva LINKER 7/10   Torna alla Home  del Capitolo1 del "Tutorial" Lezioni - Vai al DownLoad dei files DOC Torna al Menu del "Tutorial"
43 di 87
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

    

CAP 2 » 1. Catena di Compilazione 2. Editor 3. Assemblatore 4. Linker 5. Exe2Bin
6.
Ambiente di Lavoro 7. Gestore d'Ambiente Macro 8. Gestore d'Archivi OG
9. Matrici per i Programmi Sorgente 10. Gestore di Librerie Lib 
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