.thread (設定緩存器內容)
.thread 命令會指定將用於緩存器內容的線程。
.thread [/p [/r] ] [/P] [/w] [Thread]
參數
/p
(僅限即時偵錯)如果包含此選項且 Thread 為非零,則擁有此線程之進程的所有轉換頁面數據表專案 (PTE) 都會在存取之前自動轉譯為實體位址。 這可能會導致速度變慢,因為調試程式必須查閱此進程所用所有記憶體的實體位址,而且可能需要跨偵錯纜線傳輸大量數據。 (此行為與 的相同。cache forcedecodeuser.)
如果包含 /p 選項且 Thread 為零或省略,則會停用此轉譯。 (此行為與 的相同。cache noforcedecodeuser.)
/r
(僅限即時偵錯) 如果 /r 選項隨附於 /p 選項,則擁有此線程之進程的使用者模式符號會在設定進程並註冊內容之後重載。 (此行為與 的相同。重載 /user.)
/P
(僅限即時偵錯)如果包含此選項且 Thread 為非零,所有轉換頁面數據表專案 (PTE) 都會在存取之前自動轉譯為實體位址。 不同於 /p 選項,這會轉譯所有使用者模式和核心模式進程的 PT,而不只是擁有此線程的進程。 這可能會導致速度變慢,因為調試程式必須查閱使用中所有記憶體的實體位址,而且可能需要透過偵錯纜線傳輸大量數據。 (此行為與 的相同。cache forcedecodeptes.)
/w
(僅限 64 位核心偵錯)將線程的作用中內容變更為 WOW64 32 位內容。 指定的線程必須以 WOW64 狀態的進程執行。
線
線程的位址。 如果省略或零,線程內容會重設為目前的線程。
Environment
項目 | 說明 |
---|---|
模式 | 僅限核心模式 |
目標 | 即時、損毀傾印 |
平台 | 全部 |
其他資訊
如需註冊內容和其他內容設定的詳細資訊,請參閱 變更內容。
備註
一般而言,當您進行核心偵錯時,唯一可見的緩存器就是與目前線程相關聯的緩存器。
.thread 命令會指示核心調試程式使用指定的線程作為緩存器內容。 執行此命令之後,調試程式將可以存取這個線程最重要的緩存器和堆棧追蹤。 此快取器內容會持續存在,直到您允許目標執行或使用另一個緩存器內容命令(.thread、.cxr 或 .trap)。 如需完整詳細數據,請參閱 註冊內容 。
/w 選項只能在具有 WOW64 狀態之線程上執行的 64 位核心偵錯會話中使用。 擷取的內容將是 WOW64 所記住的最後一個內容;這通常是 Thread 所執行的最後一個使用者模式程式代碼。 只有在目標處於原生計算機模式時,才能使用此選項。 例如,如果目標是在使用WOW64模擬 x86 型處理器的64位電腦上執行,則無法使用這個選項。 使用 /w 選項會導致計算機模式自動切換至 x86 型處理器。
此命令實際上不會變更目前的線程。 換句話說,如果沒有任何自變數搭配使用,則 !thread 和 !teb 等延伸模組仍會預設為目前的線程。
以下是範例。 使用 !process 擴充功能來尋找所需線程的位址。 (在此情況下, !process 0 0 是用來列出所有進程,然後使用 !process 第二次列出所需進程的所有線程。
kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS fe5039e0 SessionId: 0 Cid: 0008 Peb: 00000000 ParentCid: 0000
DirBase: 00030000 ObjectTable: fe529a88 TableSize: 145.
Image: System
.....
PROCESS ffaa5280 SessionId: 0 Cid: 0120 Peb: 7ffdf000 ParentCid: 01e0
DirBase: 03b70000 ObjectTable: ffaa4e48 TableSize: 23.
Image: winmine.exe
kd> !process ffaa5280
PROCESS ffaa5280 SessionId: 0 Cid: 0120 Peb: 7ffdf000 ParentCid: 01e0
DirBase: 03b70000 ObjectTable: ffaa4e48 TableSize: 23.
Image: winmine.exe
VadRoot ffaf6e48 Clone 0 Private 50. Modified 0. Locked 0.
DeviceMap fe502e88
Token e1b55d70
.....
THREAD ffaa43a0 Cid 120.3a4 Teb: 7ffde000 Win32Thread: e1b4fea8 WAIT: (WrUserRequest) UserMode Non-Alertable
ffadc6a0 SynchronizationEvent
Not impersonating
Owning Process ffaa5280
WaitTime (seconds) 24323
Context Switch Count 494 LargeStack
.....
現在, 使用 .thread 命令搭配所需線程的位址。 這會設定快取器內容,並可讓您檢查這個線程的重要緩存器和呼叫堆疊。
kd> .thread ffaa43a0
Using context of thread ffaa43a0
kd> r
Last set context:
eax=00000000 ebx=00000000 ecx=00000000 edx=00000000 esi=00000000 edi=00000000
eip=80403a0d esp=fd581c2c ebp=fd581c60 iopl=0 nv up di pl nz na pe nc
cs=0000 ss=0000 ds=0000 es=0000 fs=0000 gs=0000 efl=00000000
0000:3a0d ?? ???
kd> k
*** Stack trace for last set context - .thread resets it
ChildEBP RetAddr
fd581c38 8042d61c ntoskrnl!KiSwapThread+0xc5
00001c60 00000000 ntoskrnl!KeWaitForSingleObject+0x1a1