KPCR:CPU控制区(Processor Control Region)

KPCR介绍:

1 .当线程进入0环时,FS:[0]指向KPCR(3环FS:[0]–>TEB)

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

3 .KPCR 存储了CPU本身要用的一些重要数据:GDT,IDT以及线程相关的一些信息 (IDT和GDT并非通用,而是一个CPU有一组)

KPCR成员_NT_TIB介绍

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

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(PRCB结构体也是KPCR的成员,没有直接通过偏移去寻找,是因为考虑到了KPCR结构体的变化)

3.+0x038 IDT :Ptr32_KIDTENTRY
IDT表基址

4.+0x03c GDT :Ptr32_KGDTENTRY
GDT表基址

5.+0x040 TSS :Ptr32_KTSS
指针,指向TSS,每个CPU都有一个TSS(TSS中有个成员是0环的栈,存储的永远都是当前这个线程的)

6.+0x051 Number :Uchar
CPU编号:0 1 2 3 4 5.。

7.+0x120 PrcbData :_KPRCB
拓展结构体(存储了KPCR一些辅助的信息)

_KPRCB成员介绍:

+0x004 CurrentThread:Ptr32_KTHREAD
存储CPU正在跑的线程

+0x008 NextThread:Ptr32_KTHREAD
待会切换的时候所切换的线程

+0x00c IdleThread:Ptr32_KTHREAD
如果一旦没有需要切换的线程,那么所需要跑的空闲线程在何处

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寻梦&之璐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值