Share via


Spazio utente e spazio di sistema

Windows offre a ogni applicazione in modalità utente un blocco di indirizzi virtuali. Questo è noto come spazio utente di tale applicazione. L'altro blocco di indirizzi di grandi dimensioni, noto come spazio di sistema o spazio kernel, non può essere accessibile direttamente dall'applicazione.

Quando WinDbg o CDB imposta un punto di interruzione nello spazio utente, questo punto di interruzione viene impostato nell'indirizzo specificato nello spazio utente di un singolo processo. Durante il debug in modalità utente, il processo corrente determina il significato degli indirizzi virtuali. Per altre informazioni, vedere Controllo dei processi e dei thread.

In modalità kernel è possibile impostare punti di interruzione nello spazio utente con i comandi bp, bu e ba o con la finestra di dialogo Punti di interruzione . È prima necessario usare il contesto del processo per specificare il processo in modalità utente proprietario dello spazio indirizzi usando .process /i (o un punto di interruzione specifico del processo in una funzione dello spazio kernel) per passare la destinazione al contesto di processo corretto.

I punti di interruzione nello spazio utente sono sempre associati al processo il cui contesto di processo è stato attivo quando sono stati impostati i punti di interruzione. Se un debugger in modalità utente esegue il debug di questo processo e se un debugger del kernel esegue il debug del computer in cui è in esecuzione il processo, questo punto di interruzione si interrompe nel debugger in modalità utente, anche se il punto di interruzione è stato effettivamente impostato dal debugger del kernel. È possibile eseguire l'interruzione del sistema dal debugger del kernel a questo punto oppure usare il comando .breakin (Break to the Kernel Debugger) dal debugger in modalità utente per trasferire il controllo al debugger del kernel.

Determinazione dell'intervallo di spazio utente e spazio del sistema

Se è necessario determinare l'estensione dello spazio utente e dello spazio di sistema nel computer di destinazione, è possibile usare il comando dp (Display Memory) da un debugger del kernel per visualizzare la variabile globale di Windows MmHighestUserAddress. Questa variabile contiene l'indirizzo della parte superiore dello spazio utente. Poiché gli indirizzi dello spazio di sistema sono sempre superiori agli indirizzi dello spazio utente, questo valore consente di determinare se qualsiasi indirizzo specificato si trova nello spazio utente o nello spazio del kernel.

Ad esempio, in un computer di destinazione a 32 bit con un processore x86 e parametri di avvio standard, questo comando mostrerà il risultato seguente:

kd> dp nt!mmhighestuseraddress L1 
81f71864  7ffeffff 

Questo indica che lo spazio utente è compreso tra l'indirizzo 0x00000000 e 0x7FFEFFFF e lo spazio di sistema varia quindi da 0x80000000 fino all'indirizzo più alto possibile (ovvero 0xFFFFFFFF in un'installazione windows a 32 bit standard).

Con un computer di destinazione a 64 bit, si verificheranno valori diversi. Ad esempio, questo comando potrebbe mostrare quanto segue:

0: kd> dp nt!mmhighestuseraddress L1 
fffff800`038b4010  000007ff`fffeffff 

Questo indica che lo spazio utente è compreso tra 0x00000000'000000000 e 0x000007FF'FFFEFFFF. Pertanto, lo spazio di sistema include tutti gli indirizzi da 0x00000800'000000000 verso l'alto.

Per altre informazioni sulla gestione della memoria di Windows, vedere Microsoft Windows Internals by David Solomon e Mark Russinovich (4th edition, Microsoft Press, 2005).