.process (設定進程內容)
.process 命令會指定哪個進程用於進程內容。
.process [/i] [/p [/r]] [/P] [Process]
參數
/我
僅即時偵錯;不在本機核心偵錯期間) 指定進程是以侵入方式進行偵錯。 這種偵錯表示目標計算機的作業系統實際上會讓指定的進程成為作用中。 (如果沒有此選項,.process 命令會改變調試程序的輸出,但不會影響目標計算機本身。如果您使用 /i,則必須使用 g (Go) 命令來執行目標。 幾秒鐘之後,目標會回到調試程式,而指定的 進程 會作用中,並用於進程內容。
/p
如果您使用 /p 和 Process 為非零,將此程式的所有轉換頁表項目轉譯為實體位址才能存取。 此轉譯可能會導致速度變慢,因為調試程式必須尋找此進程使用之所有記憶體的實體位址。 此外,調試程式可能必須跨偵錯纜線傳輸大量數據。 (此行為與 相同。cache forcedecodeuser.)
如果您包含 /p 選項且 Process 為零,或省略它,則會停用翻譯。 (此行為與 相同。cache noforcedecodeptes.)
/r
如果您使用 /r 和 /p 選項,請在設定進程內容之後重載使用者模式符號。 (此行為與 相同。重載 /user.)
/P
(僅限即時偵錯和完整記憶體傾印)如果您使用 /P 和 Process 為非零,請先將所有轉換頁表項目轉譯為實體位址,再存取。 與 /p 選項不同,/P 選項會轉譯所有使用者模式和內核模式進程的 PT,而不只是指定的進程。 此轉譯可能會導致速度變慢,因為調試程式必須尋找使用中所有記憶體的實體位址。 此外,調試程式可能必須跨偵錯纜線傳輸大量數據。 (此行為與 相同。cache forcedecodeptes.)
過程
指定您想要之程式的位址。 (更精確地說,此參數會指定此進程的 EPROCESS 區塊位址。 進程內容會設定為此進程。 如果您省略 Process 或指定零,進程內容會重設為目前系統狀態的預設進程。 (如果您使用 /i 選項來設定進程內容,則必須使用 /i 選項來重設進程內容。
Environment
項目 | 說明 |
---|---|
模式 | 僅限核心模式 |
目標 | 即時、損毀傾印 |
平台 | 全部 |
其他資訊
如需進程內容和其他內容設定的詳細資訊,請參閱 變更內容。
備註
一般而言,當您進行核心偵錯時,唯一可見的使用者模式位址空間就是與目前進程相關聯的位址空間。
.process 命令會指示核心調試程式使用特定的使用者模式進程做為進程內容。 此使用方式有數個效果,但最重要的是調試程式可以存取此進程的虛擬位址空間。 調試程式會使用此進程的分頁表來解譯所有使用者模式記憶體位址,以便讀取和寫入此記憶體。
.context (設定使用者模式位址內容) 命令的效果類似。 不過,.context 命令會將使用者模式地址內容設定為特定頁面目錄,而 .process 命令會將進程內容設定為特定進程。 在以 x86 為基礎的處理器上, .context 和 .process 幾乎具有相同的效果。 不過,在以Itanium 為基礎的處理器上,單一進程可能有多個頁面目錄。 在此情況下, .process 命令功能更強大,因為它可讓您存取與進程相關聯的所有頁面目錄。 如需進程內容的詳細資訊,請參閱 進程內容。
注意 如果您要執行即時偵錯,您應該使用 /i 或 /p 參數。 如果沒有其中一個參數,您就無法正確顯示使用者模式或會話記憶體。
/i 參數會啟動目標進程。 當您使用此選項時,您必須執行目標一次,此命令才會生效。 如果您再次執行,進程內容就會遺失。
/p 參數會啟用 forcedecodeuser 設定。 (如果 forcedecodeuser 選項已經作用中,您就不需要使用 /p。進程內容和 forcedecodeuser 狀態只會保留到目標再次執行為止。
如果您正在執行損毀傾印偵錯, 則無法使用 /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
請注意,此命令不需要 .context 命令。 使用者模式地址內容已經有所需的值。
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