.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