Debugging Tools for Windows

.context (Set User-Mode Address Context)

.context 命令用于指定用户模式地址上下文使用哪个进程的页目录,或者显示当前的用户模式地址上下文。

语法

.context [PageDirectoryBase

参数

PageDirectoryBase
指定需要的进程的页目录的基地址。用户模式地址上下文将设置为该页目录。如果PageDirectoryBase 是0,用户模式地址上下文的页目录将设置为当前系统状态。如果省略PageDirectoryBase,则显示当前的用户模式地址上下文。

环境

模式 仅内核模式
目标 活动目标、崩溃转储
平台 所有

注释

一般来说,进行内核调试时,能看到的唯一的用户模式地址空间是关联到当前进程的那个。

.context命令让内核调试器将指定的页目录作为用户模式地址上下文。该命令执行后,调试器就可以访问该虚拟地址空间了。所有用户模式内存地址都将会使用该页表来进行转换。这使得可以读些这些内存。

.process (Set Process Context)命令具有类似的作用。但是,.context 命令将用户模式地址上下文设置为指定的页目录,而.process 命令会将进程上下文设置为指定进程。在x86处理器上,这两个命令本质上效果是一样的。但是在Itanium处理器上,单个进程可能有不止一个页目录。这种情况下,.process命令要更加有用,因为它会将对页目录的所有访问关联到某个进程。查看进程上下文获得详细信息。

如果正在进行活动调试,除了.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

附加信息

关于用户模式地址上下文和其他上下文设置的更多信息,查看切换上下文

Build machine: CAPEBUILD