Sezione |
Indirizzi Base
Registri Interni
|
Capitolo 1 |
Il Processore e il Debugger |
DEBUG 8/22 [36 di 60] |
|
|
|
Aggiornato 24 settembre 2003 e 17 febbraio 2005 |
|
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:
|
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... |
|
Capitolo 1 | DEBUG 8/22 | |||||||
36 di 60 |
|
|
|
|
Home |
|
|||||||
|
Motore Ricerca |
|