Поделиться через


.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