3.KPCR
KPCR: CPU控制区(Processor Control Region)
当线程进入0环时, FS:[0]指向KPCR(3环时FS[0]-> TEB)
每个CPU都有一个KPCR结构体(一个核一个)
KPCR中存储了CPU本身要用的一些重要数据: GDT, IDT以及线程相关的一些信息。
在winbbg中查看KPCR结构体
- kd> dt _KPCR
- nt!_KPCR
- +0x000 NtTib : _NT_TIB //子结构体
- +0x01c SelfPcr : Ptr32 _KPCR//指向自己,方便寻址
- +0x020 Prcb : Ptr32 _KPRCB//指向拓展结构体PRCB(+120那)
- +0x024 Irql : UChar
- +0x028 IRR : Uint4B
- +0x02c IrrActive : Uint4B
- +0x030 IDR : Uint4B
- +0x034 KdVersionBlock : Ptr32 Void
- +0x038 IDT : Ptr32 _KIDTENTRY//IDT表基址
- +0x03c GDT : Ptr32 _KGDTENTRY//GDT表基址
- +0x040 TSS : Ptr32 _KTSS//TSS基址
- +0x044 MajorVersion : Uint2B
- +0x046 MinorVersion : Uint2B
- +0x048 SetMember : Uint4B
- +0x04c StallScaleFactor : Uint4B
- +0x050 DebugActive : UChar
- +0x051 Number : UChar//CPU编号
- +0x052 Spare0 : UChar
- +0x053 SecondLevelCacheAssociativity : UChar
- +0x054 VdmAlert : Uint4B
- +0x058 KernelReserved : [] Uint4B
- +0x090 SecondLevelCacheSize : Uint4B
- +0x094 HalReserved : [] Uint4B
- +0x0d4 InterruptMode : Uint4B
- +0x0d8 Spare1 : UChar
- +0x0dc KernelReserved2 : [] Uint4B
- +0x120 PrcbData : _KPRCB//拓展结构体
- //KPCR->+0x000 NtTib : _NT_TIB
- kd> dt _NT_TIB
- 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//指向_NT_TIB自己
- //_KPCR->PrcbData(拓展结构体)
- kd> dt _kprcb
- ntdll!_KPRCB
- +0x000 MinorVersion : Uint2B
- +0x002 MajorVersion : Uint2B
- +0x004 CurrentThread : Ptr32 _KTHREAD//当前CPU运行的线程(运行状态)
- +0x008 NextThread : Ptr32 _KTHREAD//一会要切换的线程(备用状态)
- +0x00c IdleThread : Ptr32 _KTHREAD//如果没有要切换的线程我要跑空闲线程(空闲线程)
- +0x010 Number : Char
- +0x011 Reserved : Char
- +0x012 BuildType : Uint2B
- +0x014 SetMember : Uint4B
- +0x018 CpuType : Char
- +0x019 CpuID : Char
- +0x01a CpuStep : Uint2B
- +0x01c ProcessorState : _KPROCESSOR_STATE
- +0x33c KernelReserved : [] Uint4B
- +0x37c HalReserved : [] Uint4B
- +0x3bc PrcbPad0 : [] UChar
- +0x418 LockQueue : [] _KSPIN_LOCK_QUEUE
- +0x498 PrcbPad1 : [] UChar
- +0x4a0 NpxThread : Ptr32 _KTHREAD
- +0x4a4 InterruptCount : Uint4B
- +0x4a8 KernelTime : Uint4B
- +0x4ac UserTime : Uint4B
- +0x4b0 DpcTime : Uint4B
- +0x4b4 DebugDpcTime : Uint4B
- +0x4b8 InterruptTime : Uint4B
- +0x4bc AdjustDpcThreshold : Uint4B
- +0x4c0 PageColor : Uint4B
- +0x4c4 SkipTick : Uint4B
- +0x4c8 MultiThreadSetBusy : UChar
- +0x4c9 Spare2 : [] UChar
- +0x4cc ParentNode : Ptr32 _KNODE
- +0x4d0 MultiThreadProcessorSet : Uint4B
- +0x4d4 MultiThreadSetMaster : Ptr32 _KPRCB
- +0x4d8 ThreadStartCount : [] Uint4B
- +0x4e0 CcFastReadNoWait : Uint4B
- +0x4e4 CcFastReadWait : Uint4B
- +0x4e8 CcFastReadNotPossible : Uint4B
- +0x4ec CcCopyReadNoWait : Uint4B
- +0x4f0 CcCopyReadWait : Uint4B
- +0x4f4 CcCopyReadNoWaitMiss : Uint4B
- +0x4f8 KeAlignmentFixupCount : Uint4B
- +0x4fc KeContextSwitches : Uint4B
- +0x500 KeDcacheFlushCount : Uint4B
- +0x504 KeExceptionDispatchCount : Uint4B
- +0x508 KeFirstLevelTbFills : Uint4B
- +0x50c KeFloatingEmulationCount : Uint4B
- +0x510 KeIcacheFlushCount : Uint4B
- +0x514 KeSecondLevelTbFills : Uint4B
- +0x518 KeSystemCalls : Uint4B
- +0x51c SpareCounter0 : [] Uint4B
- +0x520 PPLookasideList : [] _PP_LOOKASIDE_LIST
- +0x5a0 PPNPagedLookasideList : [] _PP_LOOKASIDE_LIST
- +0x6a0 PPPagedLookasideList : [] _PP_LOOKASIDE_LIST
- +0x7a0 PacketBarrier : Uint4B
- +0x7a4 ReverseStall : Uint4B
- +0x7a8 IpiFrame : Ptr32 Void
- +0x7ac PrcbPad2 : [] UChar
- +0x7e0 CurrentPacket : [] Ptr32 Void
- +0x7ec TargetSet : Uint4B
- +0x7f0 WorkerRoutine : Ptr32 void
- +0x7f4 IpiFrozen : Uint4B
- +0x7f8 PrcbPad3 : [] UChar
- +0x820 RequestSummary : Uint4B //记录32个就绪链表中哪些优先级 非空
- +0x824 SignalDone : Ptr32 _KPRCB
- +0x828 PrcbPad4 : [] UChar
- +0x860 DpcListHead : _LIST_ENTRY
- +0x868 DpcStack : Ptr32 Void
- +0x86c DpcCount : Uint4B
- +0x870 DpcQueueDepth : Uint4B
- +0x874 DpcRoutineActive : Uint4B
- +0x878 DpcInterruptRequested : Uint4B
- +0x87c DpcLastCount : Uint4B
- +0x880 DpcRequestRate : Uint4B
- +0x884 MaximumDpcQueueDepth : Uint4B
- +0x888 MinimumDpcRate : Uint4B
- +0x88c QuantumEnd : Uint4B
- +0x890 PrcbPad5 : [] UChar
- +0x8a0 DpcLock : Uint4B
- +0x8a4 PrcbPad6 : [] UChar
- +0x8c0 CallDpc : _KDPC
- +0x8e0 ChainedInterruptList : Ptr32 Void
- +0x8e4 LookasideIrpFloat : Int4B
- +0x8e8 SpareFields0 : [] Uint4B
- +0x900 VendorString : [] UChar
- +0x90d InitialApicId : UChar
- +0x90e LogicalProcessorsPerPhysicalProcessor : UChar
- +0x910 MHz : Uint4B
- +0x914 FeatureBits : Uint4B
- +0x918 UpdateSignature : _LARGE_INTEGER
- +0x920 NpxSaveArea : _FX_SAVE_AREA
- +0xb30 PowerState : _PROCESSOR_POWER_STATE
3.KPCR的更多相关文章
- [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Control Region)
Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 逆向分析操作系统内核代码至少需要具备两项技能: 段页汇编代码非常懂 ...
- Automated Memory Analysis
catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...
- Windows中断那些事儿
搞内核研究的经常对中断这个概念肯定不陌生,经常我们会接触很多与中断相关的术语,按照软件和硬件进行分类: 硬件CPU相关: IRQ.IDT.cli&sti 软件操作系统相关: APC.DPC.I ...
- 【转载】64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)
原文链接:http://shayi1983.blog.51cto.com/4681835/1734822 本文为原创翻译,原文出处为 http://www.codemachine.com/articl ...
- 【内核篇】Windows内核重要变量
====================================================== LIST_ENTRY PsLoadedModuleList; [定 义] wrk\wrk ...
- x64内核内存空间结构
0x00 前言 本文主要是讨论Windows 7 x64下的内核虚拟地址空间的结构,可以利用WiinDBG调试的扩展命令"!CMKD.kvas"来显示x64下的内核虚拟地址空间的整 ...
- 内核函数KiFastCallEntry
KiFastCallEntry() 机制分析 概述 Win32 子系统 API 调用 ntdll!ZwWriteFile() 函数 ntdll!KiFastSystemCall() 函数 _KUSER ...
- 驱动中获取PsActiveProcessHead变量地址的五种方法也可以获取KdpDebuggerDataListHead
PsActiveProcessHead的定义: 在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其Act ...
- Windows Internals学习笔记(六)Windows关键系统组件
参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...
随机推荐
- Dispatch Sources(转)
Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继续处理自己的事情.Grand Central Dispatch正是基于这个基本行为而设 ...
- Windows窗口程序从创建到关闭产生的消息
Windows是消息驱动的,理解消息机制及消息循环是特别重要.知道在什么情况下产生什么消息会让我们对程序有更好的控制.Windows给应用程序发消息,有些会加入应用程序的消息队列,也是就是队列消息.有 ...
- POJ 2823 Sliding Window (滑动窗口的最值问题 )
Sliding Window Time Limit: 12000MS Memory Limit: 65536K Total Submissions: 41264 Accepted: 12229 ...
- Python GIL、线程锁、信号量及事件
GIL是什么? GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码.有名的编 ...
- hpuoj 1193: Interval
Interval [STL.双指针.二分] 题目链接 http://acm.hpu.edu.cn/problem.php?id=1193 或者 题目链接 http://acm.nyist.net/Ju ...
- hdu-5596 GTW likes gt(模拟+优先队列)
题目链接: GTW likes gt Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- java-执行dos命令
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...
- bzoj 2238 Mst——树链剖分
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2238 一条非树边可以对一条链的树边产生影响.注意是边,所以把边下放到点上,只要跳 top 时 ...
- weex 创建项目坑2
安装成功weex 创建项目 weex create my-project 提示 需要安装 weexpack Installing 安装失败 后来卸载weex,重新安装weex 执行下面的命令: ...
- 上传图片时压缩图片 - 前端(canvas)做法
HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <m ...