0
: kd> dt _NT_TIB
ntdll!_NT_TIB
+
0x000
ExceptionList : Ptr64 _EXCEPTION_REGISTRATION_RECORD 当前的
0
环异常链表
+
0x008
StackBase : Ptr64 Void 从线程里复制出来的栈位置
+
0x010
StackLimit : Ptr64 Void 从线程里复制出来的栈低地址
+
0x018
SubSystemTib : Ptr64 Void
+
0x020
FiberData : Ptr64 Void
+
0x020
Version : Uint4B
+
0x028
ArbitraryUserPointer : Ptr64 Void
+
0x030
Self : Ptr64 _NT_TIB 指向自己
0
: kd> dt _KPCR
ntdll!_KPCR
+
0x000
NtTib : _NT_TIB
+
0x000
GdtBase : Ptr64 _KGDTENTRY64
+
0x008
TssBase : Ptr64 _KTSS64 指向Tss
+
0x010
UserRsp : Uint8B 指向用户层的栈
+
0x018
Self : Ptr64 _KPCR 指向自己
+
0x020
CurrentPrcb : Ptr64 _KPRCB 指向自己的KPRCB的位置
+
0x028
LockArray : Ptr64 _KSPIN_LOCK_QUEUE
+
0x030
Used_Self : Ptr64 Void
+
0x038
IdtBase : Ptr64 _KIDTENTRY64 指向IDT表基址
+
0x040
Unused : [
2
] Uint8B
+
0x050
Irql : UChar 存储了当前的irql
+
0x051
SecondLevelCacheAssociativity : UChar
+
0x052
ObsoleteNumber : UChar
+
0x053
Fill0 : UChar
+
0x054
Unused0 : [
3
] Uint4B
+
0x060
MajorVersion : Uint2B
+
0x062
MinorVersion : Uint2B
+
0x064
StallScaleFactor : Uint4B
+
0x068
Unused1 : [
3
] Ptr64 Void
+
0x080
KernelReserved : [
15
] Uint4B
+
0x0bc
SecondLevelCacheSize : Uint4B
+
0x0c0
HalReserved : [
16
] Uint4B
+
0x100
Unused2 : Uint4B
+
0x108
KdVersionBlock : Ptr64 Void
+
0x110
Unused3 : Ptr64 Void
+
0x118
PcrAlign1 : [
24
] Uint4B
+
0x180
Prcb : _KPRCB 下面是KPRCB一个很大的结构体
KPRCB有点大只介绍常用的字段了
KPRCB
+
0x008
CurrentThread : Ptr64 _KTHREAD 当前线程
KPRCB
+
0x004
LegacyNumber : UChar 是否是兼容模式,兼容模式时候启动是是
32
位内核了
KPRCB
+
0x010
NextThread : Ptr64 _KTHREAD 下一个线程
KPRCB
+
0x018
IdleThread : Ptr64 _KTHREAD 空闲线程,一般cpu空闲时候就会执行这个线程
KPRCB
+
0x028
RspBase : Uint8B 内核栈
KPRCB
+
0x8e88
RspBaseShadow : Uint8B kpti开启时候使用的跳板
0
环栈
KPRCB
+
0x8e90
UserRspShadow : Uint8B
3
环栈
KPRCB
+
0x7e9a
DeepSleep : UChar 深睡眠模式,在线程切换时候会查询不过不用太多关注跟硬件也有关系
KPRCB
+
0x7e80
InterruptCount : Uint4B 中断次数,在下面的逆向代码里能看到增加这个中断次数的代码
KPRCB
+