.thread (настройка контекста регистрации)
Команда .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