Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Команда .thread указывает, какой поток будет использоваться для контекста регистрации.
.thread [/p [/r] ] [/P] [/w] [Thread]
Параметры
/p
(только для динамической отладки) Если этот параметр включен и поток не является ненулевой, все записи таблицы страницы перехода (PTEs) для процесса владения этим потоком будут автоматически преобразованы в физические адреса перед доступом. Это может привести к замедлению, так как отладчику придется искать физические адреса для всей памяти, используемой этим процессом, и значительное количество данных может потребоваться передать по отладочному кабелю. (Это поведение совпадает с поведением. cache forcedecodeuser.)
Если параметр /p включен и поток равен нулю или опущен, этот перевод будет отключен. (Это поведение совпадает с поведением. cache noforcedecodeuser.)
/r
(только для динамической отладки) Если параметр /r включен вместе с параметром /p , символы пользовательского режима для процесса владения этим потоком будут перезагружены после установки контекстов процесса и регистрации. (Это поведение совпадает с поведением. перезагрузить /user.)
/P
(только для динамической отладки) Если этот параметр включен и поток не является ненулевой, все записи таблицы страниц перехода (PTEs) будут автоматически преобразованы в физические адреса перед доступом. В отличие от параметра /p, это преобразует PTEs для всех процессов пользовательского и ядра, а не только для процесса владения этим потоком. Это может привести к замедлению, так как отладчику придется искать физические адреса для всей используемой памяти, и может потребоваться передать огромное количество данных по отладочному кабелю. (Это поведение совпадает с поведением. cache forcedecodeptes.)
/w
(только 64-разрядная отладка ядра) Изменяет активный контекст для потока в 32-разрядный контекст WOW64. Указанный поток должен выполняться в процессе с состоянием WOW64.
Нить
Адрес потока. Если это опущено или ноль, контекст потока сбрасывается в текущий поток.
Среда
| Позиция | Description |
|---|---|
| Режимы | Только режим ядра |
| Целевые объекты | live, аварийное дампа |
| Платформы | all |
Дополнительная информация
Дополнительные сведения о контексте регистрации и других параметрах контекста см. в разделе "Изменение контекстов".
Замечания
Как правило, при отладке ядра только видимые регистры связаны с текущим потоком.
Команда .thread указывает отладчику ядра использовать указанный поток в качестве контекста регистра. После выполнения этой команды отладчик получит доступ к наиболее важным регистрам и трассировке стека для этого потока. Этот контекст регистра сохраняется, пока целевой объект не будет выполнять или использовать другую команду контекста регистра (.thread, CXR или .trap). Полные сведения см. в разделе "Регистрировать контекст ".
Параметр /w можно использовать только в 64-разрядных сеансах отладки ядра в потоке, работающем в процессе с состоянием WOW64. Полученный контекст будет последним контекстом, запоминаемым WOW64; Обычно это последний код пользовательского режима, выполняемый Thread. Этот параметр можно использовать только в том случае, если целевой объект находится в собственном режиме компьютера. Например, если целевой объект работает на 64-разрядном компьютере, который эмулирует процессор на основе x86 с помощью WOW64, этот параметр нельзя использовать. Использование параметра /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