.context (Imposta contesto indirizzo in modalità utente)
Il comando .context specifica la directory di pagina di un processo che verrà usata per il contesto dell'indirizzo in modalità utente o visualizza il contesto dell'indirizzo in modalità utente corrente.
.context [PageDirectoryBase]
Parametri
PageDirectoryBase
Specifica l'indirizzo di base per una directory di pagine di un processo desiderato. Il contesto dell'indirizzo in modalità utente verrà impostato su questa directory della pagina. Se PageDirectoryBase è zero, il contesto dell'indirizzo in modalità utente verrà impostato sulla directory della pagina per lo stato corrente del sistema. Se PageDirectoryBase viene omesso, viene visualizzato il contesto dell'indirizzo in modalità utente corrente.
Ambiente
Articolo | Descrizione |
---|---|
Modalità | Solo modalità kernel |
Target | live, dump di arresto anomalo |
Piattaforme | tutto |
Informazioni aggiuntive
Per altre informazioni sul contesto dell'indirizzo in modalità utente e altre impostazioni di contesto, vedere Modifica dei contesti.
Osservazioni:
In genere, quando si esegue il debug del kernel, l'unico spazio indirizzi in modalità utente visibile è quello associato al processo corrente.
Il comando .context indica al debugger del kernel di usare la directory di pagina specificata come contesto di indirizzo in modalità utente. Dopo l'esecuzione di questo comando, il debugger avrà accesso a questo spazio indirizzi virtuale. Le tabelle di pagina per questo spazio indirizzi verranno usate per interpretare tutti gli indirizzi di memoria in modalità utente. In questo modo è possibile leggere e scrivere in questa memoria.
Il comando .process (Set Process Context) ha un effetto simile. Tuttavia, il comando .context imposta il contesto dell'indirizzo in modalità utente su una directory di pagina specifica, mentre il comando .process imposta il contesto del processo su un processo specifico. In un processore x86, questi due comandi hanno essenzialmente lo stesso effetto. Per altri dettagli, vedere Contesto del processo.
Se si esegue il debug in tempo reale, è necessario eseguire un comando .cache forcedecodeuser oltre al comando .context. In questo modo il debugger cerca gli indirizzi fisici dello spazio di memoria necessario. Questo può essere lento, perché spesso significa che una grande quantità di dati deve essere trasferita attraverso il cavo di debug.
Se si esegue il debug del dump di arresto anomalo del sistema, il comando .cache non è necessario. Tuttavia, non si avrà accesso ad alcuna parte dello spazio degli indirizzi virtuali del processo in modalità utente che sono stati inseriti su disco quando si è verificato l'arresto anomalo del sistema.
Ecco un esempio. Usare l'estensione !process per trovare la base di directory per il processo desiderato:
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0 SessionId: 0 Cid: 0008 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: fe529b68 TableSize: 50.
Image: System
...
PROCESS fe3c0d60 SessionId: 0 Cid: 0208 Peb: 7ffdf000 ParentCid: 00d4
DirBase: 0011f000 ObjectTable: fe3d0f48 TableSize: 30.
Image: regsvc.exe
Usare ora il comando .context con questa directory di pagina.
kd> .context 0011f000
In questo modo è possibile esaminare lo spazio indirizzi in diversi modi. Ecco ad esempio l'output dell'estensione !peb :
kd> !peb
PEB at 7FFDF000
InheritedAddressSpace: No
ReadImageFileExecOptions: No
BeingDebugged: No
ImageBaseAddress: 01000000
Ldr.Initialized: Yes
Ldr.InInitializationOrderModuleList: 71f40 . 77f68
Ldr.InLoadOrderModuleList: 71ec0 . 77f58
Ldr.InMemoryOrderModuleList: 71ec8 . 77f60
01000000 C:\WINNT\system32\regsvc.exe
77F80000 C:\WINNT\System32\ntdll.dll
77DB0000 C:\WINNT\system32\ADVAPI32.dll
77E80000 C:\WINNT\system32\KERNEL32.DLL
77D40000 C:\WINNT\system32\RPCRT4.DLL
77BE0000 C:\WINNT\system32\secur32.dll
SubSystemData: 0
ProcessHeap: 70000
ProcessParameters: 20000
WindowTitle: "'C:\WINNT\system32\regsvc.exe'"
ImageFile: 'C:\WINNT\system32\regsvc.exe'
CommandLine: 'C:\WINNT\system32\regsvc.exe'
DllPath: 'C:\WINNT\system32;.;C:\WINNT\System32;C:\WINNT\system;C:\WINNT;C:\WINNT\system32;C:\WINNT;C:\WINNT\System32\Wbem;C:\PROGRA~1\COMMON~1\AUTODE~1'
Environment: 0x10000