.context (Establecer contexto de dirección en modo de usuario)
El comando .context especifica qué directorio de páginas de un proceso se usará para el contexto de dirección en modo de usuario o muestra el contexto de dirección del modo de usuario actual.
.context [PageDirectoryBase]
Parámetros
PageDirectoryBase
Especifica la dirección base de un directorio de páginas de un proceso deseado. El contexto de dirección en modo de usuario se establecerá en este directorio de páginas. Si PageDirectoryBase es cero, el contexto de dirección en modo de usuario se establecerá en el directorio de páginas para el estado actual del sistema. Si se omite PageDirectoryBase, se muestra el contexto de dirección en modo de usuario actual.
Entorno
Elemento | Descripción |
---|---|
Modos | solo modo kernel |
Destinos | en tiempo real, volcado de memoria |
Platforms | all |
Información adicional
Para obtener más información sobre el contexto de dirección en modo de usuario y otras configuraciones de contexto, consulte Cambio de contextos.
Comentarios
Por lo general, cuando se realiza la depuración del kernel, el único espacio de direcciones visible en modo de usuario es el asociado al proceso actual.
El comando .context indica al depurador de kernel que use el directorio de páginas especificado como contexto de dirección en modo de usuario. Una vez ejecutado este comando, el depurador tendrá acceso a este espacio de direcciones virtual. Se usarán las tablas de páginas de este espacio de direcciones para interpretar todas las direcciones de memoria en modo de usuario. Esto le permite leer y escribir en esta memoria.
El comando .process (Establecer contexto de proceso) tiene un efecto similar. Sin embargo, el comando .context establece el contexto de dirección en modo de usuario en un directorio de páginas específico, mientras que el comando .process establece el contexto del proceso en un proceso específico. En un procesador x86, estos dos comandos tienen esencialmente el mismo efecto. Consulte Contexto de proceso para obtener más detalles.
Si está realizando la depuración en tiempo real, debe emitir un comando .cache forcedecodeuser además del comando .context. Esto obliga al depurador a buscar las direcciones físicas del espacio de memoria necesario. (Esto puede ser lento, ya que a menudo significa que se debe transferir una gran cantidad de datos a través del cable de depuración).
Si va a depurar el volcado de memoria, no es necesario el comando .cache. Sin embargo, no tendrá acceso a ninguna parte del espacio de direcciones virtual del proceso en modo de usuario que se paginaron en el disco cuando se produjo el bloqueo.
A continuación se muestra un ejemplo: Use la extensión !process para buscar la base de directorios para el proceso deseado:
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
Ahora use el comando .context con esta base del directorio de páginas.
kd> .context 0011f000
Esto le permite analizar el espacio de direcciones de varias maneras. Por ejemplo, esta es la salida de la extensión !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