KPCR:CPU控制区(Processor Control Region)
文章目錄
- KPCR介紹:
- KPCR成員_NT_TIB介紹
- _KPRCB成員介紹:
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
如果一旦沒有需要切換的線程,那么所需要跑的空閑線程在何處
總結
以上是生活随笔為你收集整理的KPCR:CPU控制区(Processor Control Region)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: EPROCESS ETHREAD简介
- 下一篇: 等待链表_调度(准备运行)链表