Debugging Tools for Windows

.process (Set Process Context)

.process 命令指定要用作进程上下文的进程。

语法

.process [/i] [/p [/r] ] [/P] [Process

参数

/i
(Windows XP 和之后的系统;仅活动调试;非本地内核调试) 指定要侵入(invasively)调试Process 。这种调试意味着目标机上的操作系统实际上将指定的进程激活。 (如果不带该参数,.process 命令改变调试器的输出,但是不会作用于目标机本身。)如果使用了 /i,必须使用g (Go)命令来执行目标。数秒之后,目标会再次中断到调试器中,并且指定的 Process 被激活并用作当前进程上下文。
/p
如果使用了/p 并且Process 非0,在访问之前将该进程所有页表入口(PTE)转换成物理地址。这种转换可能造成速度变慢,因为调试器必须找到该进程使用的所有内存的物理地址。调试器也需要通过调试电缆传输大量数据。 (该行为和.cache forcedecodeuser一样。)

如果包含/p 并且Process为0或者省略,则禁用这样的转换。 (这种行为和.cache noforcedecodeptes一样。)

/r
如果使用了/r/p选项,进程上下文设置之后会重新加载用户模式符号。 (该行为和.reload /user一样。)
/P
 (仅活动调试) 如果使用/P 并且Process 非0,在访问之前将该进程所有页表入口(PTE)转换成物理地址。和/p不同,/P 选项转换所有用户模式和内核模式进程的PTE,而不只是指定进程。这种转换可能造成速度变慢,因为调试器必须找到该进程使用的所有内存的物理地址。调试器也需要通过调试电缆传输大量数据。 (该行为和.cache forcedecodeptes一样。)
Process
指定需要的进程的地址。(更明确一些,该参数指定进程的EPROCESS 块的地址)。进程上下文会设置为该进程。如果省略Process 或指定0,进程上下文会重新设置为当前系统状态的默认进程。 (如果使用了/i 选项来设置进程上下文,则也必须使用/i选项来重置进程上下文。)

环境

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

注释

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

.process 命令指示内核调试器使用指定的用户模式进程作为进程上下文。这种用法有几种作用,但是最重要的是调试器可以访问该进程的虚拟地址空间。调试器使用该进程的页表来解释所有用户模式内存地址,所以就可以读写这些内存。

.context (Set User-Mode Address Context) 命令有类似作用。但是,.context 命令将用户模式地址上下文设置为指定的页目录,而.process 命令将进程上下文设置为指定进程。在x86处理器上,.context.process 的作用几乎完全一样。但是在Itanium处理器上,单个进程可能拥有不止一个页目录。这时,.process 命令更加强大,因为可以启用对该进程关联的所有页目录的访问。进程上下文的更多信息,查看进程上下文

注意 如果在进行活动调试,需要使用/i/p参数。如果不使用它们之一,则不能正确显示用户模式或会话的内存。

/i 参数激活目标进程。使用该选项时,必须执行目标一次以使得命令起作用。如果再次执行,则进程上下文又会丢失。

/p 参数启用forcedecodeuser 设置。(如果forcedecodeuser 选项已经激活,则不需要 /p。) 进程上下文和forcedecodeuser 状态只在目标再次运行起来之前保持。

如果调试崩溃转储, /i/p 选项不能使用。不管如何,不能访问当崩溃发生时被换页到磁盘上的用户模式进程虚拟内存的任何部分。

如果想使用内核调试器在用户空间设置断点,使用/i选项来将目标切换到正确的进程上下文。

下面的例子说明了如何使用!process扩展命令来查找需要的进程的 EPROCESS 块地址。

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

下面的.process 命令使用该进程的地址。

kd> .process fe3c0d60
Implicit process is now fe3c0d60

注意该命令使得不再需要.context 命令。用户模式地址上下文已经是需要的值了。

kd> .context 
User-mode page directory base is 11f000

这个值使得可以以各种方式察看内存空间。例如,下面是一个!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