前面我们介绍了windows的两大结构体,一个是进程结构体,一个是线程结构体。那么第三个就是KPCR。KPCR是什么呢,是用于描述CPU的结构体。每一个CPU都有一个这样的结构体来描述CPU干了什么事。
1.在当线程切换的时候,也就是线程从3环进入0环时,FS:[0]->TEB切换成KPCR
2.每个CPU都有一个KPCR结构体
3.KRCR中存储了CPU本身要用到的一些重要的数据结构:GDT.IDT等
上图就是KPCR结构体成员。
第一个成员叫NtTib,这个成员非常重要。它也是个结构体:
在KPCR最后一个成员叫PrcbData,他是一个扩展结构体,也是放了很多有用的信息。不过这个结构体很大,我们截取一部分看看:
+0x004 CurrentThread : Ptr32 _KTHREAD
+0x008 NextThread : Ptr32 _KTHREAD
+0x00c IdleThread : Ptr32 _KTHREAD
这三个成员和线程切换有关,第一个描述了当前在跑的线程,第二个描述了一会要切换的线程是谁,第三个是当没有线程需要执行的时候,执行的空闲线程是谁。