|
 |
Il Processore e il Debugger |
DEBUG 8/22
[36 di 60] |
|
 |
|
Aggiornato
24 settembre 2003 e 17 febbraio 2005 |
 |
|
Comando F - Riempie la memoria [azzeramento
delle locazioni] |
|
 | Questo comando è piuttosto comodo in particolari
situazioni; l'uso del comando D (Dump)
ci ha insegnato che l'analisi del contenuto della
Ram di sistema è molto spesso casuale. |
 |
Tieni
ben presente che il contenuto esadecimale delle locazioni
di memoria è del tutto imprevedibile nel momento in cui
Debug ne prende possesso: è possibile che i valori letti siano
tutti a 00, ma non è da escludere qualunque altro valore
(memoria "sporca") lasciato in Ram dall'uso da
parte di precedenti applicativi. |
 | Questa osservazione vale, ovviamente, anche nel segmento a
disposizione del debugger; qualunque cosa venga inserita risulta poco
probabile distinguerne la fine. |
 | Per questo ti consiglio di "pulire"
il segmento prima di caricare il file da analizzare, evitando di entrare in Debug
nel modo, per altro sacrosanto,
suggerito in precedenza. Per studiare il file
xxx.com (è solo un esempio!), dopo essere entrati in debug la sequenza
possibile è mostrata in figura:
-f 100 e000 00
-n xxx.com
-l |
|
 | Il comando F
(FILL, riempi) si aspetta l'intervallo
di indirizzi (offset)
iniziale e finale
(nel nostro esempio 0100H e
E000H);
bisogna stare attenti a non esagerare: se si cancellano locazioni sotto
l'indirizzo 005CH o sopra
E000H
(valore indicativo) il debug potrebbe "piantarsi". |
 | Le aree esterne a questo intervallo sono
infatti vitali per il suo funzionamento: nelle prime 92 locazioni sono
presenti dati insostituibili del Prefisso di Segmento di Programma (PSP),
mentre le ultime sono destinate allo
stack; l'utilizzo del Symbolic
Debug rende quest'ultima zona certamente sovradimensionata
rispetto a quella di norma prevista (di solito è sufficiente riservare
qualche decina di bytes in fondo al segmento, per esempio a partire da
FF00H). |
 | Se l'indirizzo specificato è solo
quello di offset i dati visualizzati si ritengono
appartenenti al segmento puntato da DS;
in condizioni di default (come quelle in cui operiamo ora) il problema non
si pone (tutti e 4 i registri di segmento hanno lo stesso valore). |
 | Il terzo parametro
del comando F può essere di diverso
tipo: l'esempio suggerito utilizza un byte
esadecimale di valore 00H.
Dopo la conferma con Invio sembra
non sia successo nulla; in realtà la memoria è stata riempita, in tempo
reale, di 00H, come dimostra la seguente analisi con il comando D: |
 |
Se fai click sull'icona a
sinistra si apre l'Ambiente Assembly
e puoi
provare DEBUG
on-line.
Scegli
il pulsante di opzione "Aprire il file" o "Esegui
l'applicazione"
e conferma
con
OK. NB: alcuni gestori di protezione (per esempio SP2 di WinXP) non ti consentono questa operazione: in questo caso scrivi c:\arch-lab\bin\sys\assembler.pif direttamente nel campo indirizzo del Browser |
 |
 | Per evitare un crampo alla mano... dopo aver verificato
l'azzeramento delle prime pagine abbiamo dato il comando D
DFF0, puntando un indirizzo leggermente inferiore a quello finale
passato al comando F: il risultato
dell'indagine sottolinea che, effettivamente, dopo
di esso nessun'altra locazione risulta azzerata. |
 | Se immaginiamo di caricare qualunque cosa in questo
segmento di memoria è facile rilevare il suo ultimo
byte, con grande probabilità quello dopo il quale comincia la lunga
teoria degli zero... |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|