KPCR学习

85 篇文章 6 订阅

KPCR:CPU控制区(Processor Control Region)

KPCR介绍

KPCR相当于一个副本,存储着线程相关的一些重要信息,这样CPU在处理时就不用查线程了。
1) 当线程进入0环时,FS:[0]指向KPCR(3环时FS:[0] -> TEB)

2) 每个CPU都有一个KPCR结构体(一个核一个)

3) KPCR中存储了CPU本身要用的一些重要数据:GDT、IDT以及线程相关的一些信息。

(在winbbg中查看KPCR结构体)

_NT_TIB主要成员介绍

1) +0x000 ExceptionList : Ptr32_EXCEPTION_REGISTRATION_RECORD
当前线程内核异常链表(SEH)

2) +0x004 StackBase : Ptr32 Void
+0x008 StackLimit : Ptr32 Void
当前线程内核栈的基址和大小

3) +0x018 Self : Ptr32 _NT_TIB

指向自己(也就是指向KPCR结构) 这样设计的目的是为了查找方便

KPCR的其他成员介绍

1) +0x01c SelfPcr : Ptr32 _KPCR
指向自己,方便寻址

2) +0x020 Prcb : Ptr32 _KPRCB
指向拓展结构体PRCB

3) +0x038 IDT : Ptr32 _KIDTENTRY
IDT表基址

4) +0x03c GDT : Ptr32 _KGDTENTRY
GDT表基址

5) +0x040 TSS : Ptr32 _KTSS
指针,指向TSS,每个CPU都有一个TSS.都是指向当前线程的

6) +0x051 Number : UChar
CPU编号:0 1 2 3 4 5。。。

7) +0x120 PrcbData : _KPRCB
拓展结构体

PRCB成员介绍

    +0x004 CurrentThread    : Ptr32 _KTHREAD
    +0x008 NextThread       : Ptr32 _KTHREAD
    +0x00c IdleThread       : Ptr32 _KTHREAD
当前线程

即将切换的下一个线程

空闲线程        
kd> dt _KPCR
ntdll!_KPCR
   +0x000 NtTib            : _NT_TIB
   +0x000 Used_ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD
   +0x004 Used_StackBase   : Ptr32 Void
   +0x008 Spare2           : Ptr32 Void
   +0x00c TssCopy          : Ptr32 Void
   +0x010 ContextSwitches  : Uint4B
   +0x014 SetMemberCopy    : Uint4B
   +0x018 Used_Self        : Ptr32 Void
   +0x01c SelfPcr          : Ptr32 _KPCR
   +0x020 Prcb             : Ptr32 _KPRCB
   +0x024 Irql             : UChar
   +0x028 IRR              : Uint4B
   +0x02c IrrActive        : Uint4B
   +0x030 IDR              : Uint4B
   +0x034 KdVersionBlock   : Ptr32 Void
   +0x038 IDT              : Ptr32 _KIDTENTRY
   +0x03c GDT              : Ptr32 _KGDTENTRY
   +0x040 TSS              : Ptr32 _KTSS
   +0x044 MajorVersion     : Uint2B
   +0x046 MinorVersion     : Uint2B
   +0x048 SetMember        : Uint4B
   +0x04c StallScaleFactor : Uint4B
   +0x050 SpareUnused      : UChar
   +0x051 Number           : UChar
   +0x052 Spare0           : UChar
   +0x053 SecondLevelCacheAssociativity : UChar
   +0x054 VdmAlert         : Uint4B
   +0x058 KernelReserved   : [14] Uint4B
   +0x090 SecondLevelCacheSize : Uint4B
   +0x094 HalReserved      : [16] Uint4B
   +0x0d4 InterruptMode    : Uint4B
   +0x0d8 Spare1           : UChar
   +0x0dc KernelReserved2  : [17] Uint4B
   +0x120 PrcbData         : _KPRCB
kd> dt _NT_TIB//3环的TEB也有这个结构体,不过存的是3环的信息
ntdll!_NT_TIB
   +0x000 ExceptionList    : Ptr32 _EXCEPTION_REGISTRATION_RECORD
   +0x004 StackBase        : Ptr32 Void
   +0x008 StackLimit       : Ptr32 Void
   +0x00c SubSystemTib     : Ptr32 Void
   +0x010 FiberData        : Ptr32 Void
   +0x010 Version          : Uint4B
   +0x014 ArbitraryUserPointer : Ptr32 Void
   +0x018 Self             : Ptr32 _NT_TIB

参考资料

[1] 滴水视频

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值