.context(设置用户模式地址上下文)
.context 命令指定进程的哪个页面目录将用于用户模式地址上下文,或显示当前用户模式地址上下文。
.context [PageDirectoryBase]
参数
PageDirectoryBase
指定所需进程的页面目录的基址。 会将用户模式地址上下文设置为此页面目录。 如果 PageDirectoryBase 为零,则会将用户模式地址上下文设置为当前系统状态的页面目录。 如果 PageDirectoryBase 被省略,将显示当前用户模式地址上下文。
环境
项 | 说明 |
---|---|
模式 | 仅内核模式 |
目标 | 实时、崩溃转储 |
平台 | 全部 |
其他信息
有关用户模式地址上下文和其他上下文设置的详细信息,请参阅更改上下文。
注解
通常,在进行内核调试时,唯一可见的用户模式地址空间是与当前进程关联的地址空间。
.context 命令指示内核调试器将指定的页面目录用作用户模式地址上下文。 执行此命令后,调试器将有权访问此虚拟地址空间。 此地址空间的页面表将用于解释所有用户模式内存地址。 这样,就可以读取和写入此内存。
.process(设置进程上下文)命令具有类似的效果。 但是,.context 命令将用户模式地址上下文设置为特定页面目录,而 .process 命令将进程上下文设置为特定进程。 在 x86 处理器上,这两个命令实际上具有相同的效果。 有关更多详细信息,请参阅进程上下文。
如果要进行实时调试,则除了 .context 命令外,还应发出 .cache forcedecodeuser 命令。 这会强制调试器查找所需内存空间的物理地址。 (这可能会很慢,因为它通常意味着必须跨调试电缆传输大量数据。)
如果要进行崩溃转储调试,则不需要 .cache 命令。 但是,无权访问发生崩溃时分页到磁盘的用户模式进程的虚拟地址空间的任何部分。
以下是一个示例。 使用 !process 扩展查找所需进程的目录基:
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
现在,将 .context 命令与此页面目录基配合使用。
kd> .context 0011f000
这使您能够以各种方式检查地址空间。 例如,下面是 !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