.context (設定使用者模式地址內容)
.context 命令會指定行程的頁面目錄將用於使用者模式地址內容,或顯示目前的使用者模式地址內容。
.context [PageDirectoryBase]
參數
PageDirectoryBase
指定所需進程之頁面目錄的基位址。 使用者模式位址內容將會設定為此頁面目錄。 如果 PageDirectoryBase 為零,使用者模式地址內容將會設定為目前系統狀態的頁面目錄。 如果 省略 PageDirectoryBase ,則會顯示目前的使用者模式地址內容。
Environment
項目 | 說明 |
---|---|
模式 | 僅限核心模式 |
目標 | 即時、損毀傾印 |
平台 | 全部 |
其他資訊
如需使用者模式位址內容和其他內容設定的詳細資訊,請參閱 變更內容。
備註
一般而言,當您進行核心偵錯時,唯一可見的使用者模式位址空間就是與目前進程相關聯的位址空間。
.context 命令會指示核心調試程式使用指定的頁面目錄作為使用者模式地址內容。 執行此命令之後,調試程式將可以存取此虛擬位址空間。 此位址空間的頁面表格將用來解譯所有使用者模式記憶體位址。 這可讓您讀取和寫入此記憶體。
.process (Set Process Context) 命令有類似的效果。 不過,.context 命令會將使用者模式地址內容設定為特定頁面目錄,而 .process 命令會將進程內容設定為特定進程。 在 x86 處理器上,這兩個命令基本上具有相同的效果。 如需詳細資訊,請參閱 處理內容 。
如果您要進行即時偵錯,除了 .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