Accesso alla memoria per indirizzo virtuale
Per accedere agli indirizzi di memoria o agli intervalli di indirizzi, è possibile usare diversi comandi. Visual Studio e WinDbg forniscono elementi dell'interfaccia utente (nonché comandi) che è possibile usare per visualizzare e modificare la memoria. Per altre informazioni, vedere Visualizzazione e modifica della memoria in WinDbg (versione classica).
I comandi seguenti possono leggere o scrivere memoria in un'ampia gamma di formati. Questi formati includono byte esadecimali, parole (parole, parole doppie e quad-words), interi (numeri interi brevi, lunghi e quad e interi senza segno), numeri a virgola mobile (10 byte, 16 byte, 32 byte e numeri reali a 64 byte) e caratteri ASCII.
Il comando d* (Display Memory) visualizza il contenuto di un indirizzo o un intervallo di memoria specificato.
Il comando e* (Enter Values) scrive un valore nell'indirizzo di memoria specificato.
È possibile usare i comandi seguenti per gestire tipi di dati più specializzati:
Il comando dt (Tipo di visualizzazione) trova un'ampia gamma di tipi di dati e visualizza le strutture di dati create dall'applicazione di cui viene eseguito il debug. Questo comando è altamente versatile e ha molte varianti e opzioni.
Il comando ds, dS (Display String) visualizza una struttura di dati STRING, ANSI_STRING o UNICODE_STRING.
Le tracce del comando dl (Visualizza elenco collegato) e visualizzano un elenco collegato.
Il comando d*s (Visualizza parole e simboli) trova parole doppie o quad-words che potrebbero contenere informazioni sui simboli e quindi visualizza i dati e le informazioni sul simbolo.
Il comando !address extension visualizza informazioni sulle proprietà della memoria che si trova in un indirizzo specifico.
È possibile usare i comandi seguenti per modificare gli intervalli di memoria:
Il comando m (Sposta memoria) sposta il contenuto di un intervallo di memoria in un altro.
Il comando f (Fill Memory) scrive un criterio in un intervallo di memoria, ripetendolo fino a quando l'intervallo non è pieno.
Il comando c (Confronta memoria) confronta il contenuto di due intervalli di memoria.
Il comando s (Search Memory) cerca un criterio specificato all'interno di un intervallo di memoria o cerca eventuali caratteri ASCII o Unicode presenti in un intervallo di memoria.
Il comando holdmem (Hold and Compare Memory) confronta un intervallo di memoria con un altro.
Nella maggior parte dei casi, questi comandi interpretano i relativi parametri nel radix corrente. Pertanto, è necessario aggiungere 0x prima degli indirizzi esadecimali se il radix corrente non è 16. Tuttavia, l'output di visualizzazione di questi comandi è in genere in formato esadecimale, indipendentemente dal radix corrente. Per altre informazioni sull'output, vedere i singoli argomenti relativi ai comandi. Nella finestra Memoria vengono visualizzati numeri interi e numeri reali in formato decimale e vengono visualizzati altri formati in formato esadecimale.
Per modificare il radix predefinito, usare il comando n (Set Number Base). Per convertire rapidamente i numeri da una base a un'altra, usare ? (Espressione di valutazione) comando o il comando .formats (Mostra formati numero).
Quando si esegue il debug in modalità utente, il significato degli indirizzi virtuali è determinato dal processo corrente. Quando si esegue il debug in modalità kernel, il significato degli indirizzi virtuali può essere controllato dal debugger. Per altre informazioni, vedere Contesto del processo.