.context (настройка контекста адреса в режиме пользователя)
Команда контекста .context указывает, какой каталог страницы процесса будет использоваться для контекста адреса в пользовательском режиме или отображает текущий контекст адреса в режиме пользователя.
.context [PageDirectoryBase]
Параметры
PageDirectoryBase
Задает базовый адрес для каталога страницы требуемого процесса. Контекст адреса в пользовательском режиме будет задан в этом каталоге страницы. Если PageDirectoryBase равно нулю, контекст адреса в пользовательском режиме будет установлен в каталог страниц для текущего состояния системы. Если PageDirectoryBase опущен, отображается текущий контекст адреса в пользовательском режиме.
Среда
Позиция | Description |
---|---|
Режимы | Только режим ядра |
Целевые объекты | live, аварийное дампа |
Платформы | all |
Дополнительная информация
Дополнительные сведения о контексте адреса в пользовательском режиме и других параметрах контекста см. в разделе "Изменение контекстов".
Замечания
Как правило, при отладке ядра только видимое адресное пространство в пользовательском режиме связано с текущим процессом.
Команда .context указывает отладчику ядра использовать указанный каталог страницы в качестве контекста адреса в режиме пользователя. После выполнения этой команды отладчик получит доступ к этому виртуальному адресное пространство. Таблицы страниц для этого адресного пространства будут использоваться для интерпретации всех адресов памяти в режиме пользователя. Это позволяет читать и записывать в эту память.
Команда .process (Set Process Context) имеет аналогичный эффект. Однако команда .context задает контекст адреса в пользовательском режиме для определенного каталога страницы, а команда .process задает контекст процесса определенному процессу. На процессоре x86 эти две команды по сути имеют одинаковый эффект. Дополнительные сведения см. в контексте процесса.
Если выполняется динамическая отладка, в дополнение к команде .context следует выполнить команду .cache forcedecodeuser. Это заставляет отладчика искать физические адреса необходимого пространства памяти. (Это может быть медленно, так как часто это означает, что огромный объем данных должен передаваться по отладочному кабелю.)
Если выполняется отладка аварийного дампа, команда кэша не требуется. Однако у вас не будет доступа к каким-либо частям виртуального адресного пространства процесса пользовательского режима, которые были страницы на диск при сбое.
Ниже приведен пример. Используйте расширение !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