.process (задать контекст процесса)
Команда .process указывает, какой процесс используется для контекста процесса.
.process [/i] [/p [/r]] [/P] [Process]
Параметры
/я
Только динамическая отладка; не во время локальной отладки ядра) Указывает, что процесс должен быть отлаживаем инвазивно. Такой вид отладки означает, что операционная система целевого компьютера фактически делает указанный процесс активным. (Без этого параметра команда .process изменяет выходные данные отладчика, но не влияет на сам целевой компьютер.) При использовании /i необходимо использовать команду g (Go) для выполнения целевого объекта. Через несколько секунд целевой объект прерывается обратно в отладчик, а указанный процесс активен и используется для контекста процесса.
/p
Преобразует все записи таблицы страниц перехода (PTEs) для этого процесса на физические адреса перед доступом, если вы используете /p и Process является ненулевой. Этот перевод может привести к замедлению, так как отладчик должен найти физические адреса для всей памяти, используемой этим процессом. Кроме того, отладчику может потребоваться передать значительный объем данных по отладочному кабелю. (Это поведение совпадает с . cache forcedecodeuser.)
Если включен параметр /p и процесс равен нулю или не указан, перевод отключен. (Это поведение совпадает с . cache noforcedecodeptes.)
/r
Перезагружает символы пользовательского режима после установки контекста процесса, если вы используете параметры /r и /p . (Это поведение совпадает с . перезагрузить /user.)
/P
(Только динамические отладочные и полные дампы памяти) Преобразует все записи таблицы страниц перехода (PTEs) на физические адреса перед доступом, если вы используете /P и Process является ненулевой. В отличие от параметра /p, параметр /P преобразует PTEs для всех процессов пользовательского режима и режима ядра, а не только для указанного процесса. Этот перевод может привести к замедлению, так как отладчик должен найти физические адреса для всей используемой памяти. Кроме того, отладчику может потребоваться передать большое количество данных по отладочному кабелю. (Это поведение совпадает с . cache forcedecodeptes.)
Процесс
Указывает адрес нужного процесса. (Точнее, этот параметр задает адрес блока EPROCESS для этого процесса. Контекст процесса задан для этого процесса. Если опустить процесс или указать ноль, контекст процесса сбрасывается в процесс по умолчанию для текущего состояния системы. (Если вы использовали параметр /i для задания контекста процесса, необходимо использовать параметр /i для сброса контекста процесса.)
Среда
Позиция | Description |
---|---|
Режимы | Только режим ядра |
Целевые объекты | live, аварийное дампа |
Платформы | all |
Дополнительная информация
Дополнительные сведения о контексте процесса и других параметрах контекста см. в разделе "Изменение контекстов".
Замечания
Как правило, при отладке ядра единственным видимым адресным пространством в режиме пользователя является тот, который связан с текущим процессом.
Команда .process указывает отладчику ядра использовать определенный процесс пользовательского режима в качестве контекста процесса. Это использование имеет несколько эффектов, но самое важное заключается в том, что отладчик имеет доступ к виртуальному адресном пространству этого процесса. Отладчик использует таблицы страниц для этого процесса для интерпретации всех адресов памяти в пользовательском режиме, чтобы можно было читать и записывать в эту память.
Команда .context (Set User-Mode Address Context) имеет аналогичный эффект. Однако команда .context задает контекст адреса в пользовательском режиме для определенного каталога страницы, а команда .process задает контекст процесса определенному процессу. На процессоре на основе x86 контекст и процесс .имеют почти тот же эффект. Однако на процессоре на основе Itanium один процесс может иметь несколько каталогов страниц. В этой ситуации команда .process является более мощной, так как она обеспечивает доступ ко всем каталогам страниц, связанным с процессом. Дополнительные сведения о контексте процесса см. в разделе "Контекст процесса".
Обратите внимание , что при выполнении динамической отладки следует использовать параметр /i или /p . Без одного из этих параметров невозможно правильно отображать память пользователя или сеанса.
Параметр /i активирует целевой процесс. При использовании этого параметра необходимо выполнить целевой объект один раз, чтобы эта команда ввела в силу. При повторном выполнении контекст процесса теряется.
Параметр /p включает параметр принудительного кода. (Если параметр принудительного кодаuser уже активен, не нужно использовать /p.) Контекст процесса и состояние принудительного кодаuser остаются только до тех пор, пока целевой объект не будет выполнен снова.
Если выполняется отладка аварийного дампа, параметры /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
Обратите внимание, что эта команда делает команду контекста ненужной. Контекст адреса в пользовательском режиме уже имеет требуемое значение.
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