我读过可以用 CS 寄存器的第 3 位检查环电平。
是否有另一个寄存器真正包含环值(2 位)
我读过可以用 CS 寄存器的第 3 位检查环电平。
是否有另一个寄存器真正包含环值(2 位)
你在找这个吗?
0:002> dx (( ntdll!_KTHREAD *) @$thread)->PreviousMode
(( ntdll!_KTHREAD *) @$thread)->PreviousMode : 0 [Type: char]
0:002> ?? (( ntdll!_KTHREAD *) @$thread)->PreviousMode
char 0n0 ''
或在 kmode
0: kd> dq gs:[188] l1
002b:00000000`00000188 ffff8889`d75ce080
0: kd> ? @$thread
Evaluate expression: -131349371625344 = ffff8889`d75ce080
0: kd> dx @$thread->Tcb.PreviousMode
@$thread->Tcb.PreviousMode : 1 [Type: char]
0: kd> uf nt!ExGetPreviousMode
nt!ExGetPreviousMode:
fffff804`41c45f00 65488b042588010000 mov rax,qword ptr gs:[188h]
fffff804`41c45f09 0fb68032020000 movzx eax,byte ptr [rax+232h]
fffff804`41c45f10 c3 ret
0: kd> ?? #FIELD_OFFSET(nt!_KTHREAD , PreviousMode)
long 0n562
0: kd> ? 0n562
Evaluate expression: 562 = 00000000`00000232