KPCR: CPU控制区(Processor Control Region)

当线程进入0环时, FS:[0]指向KPCR(3环时FS[0]-> TEB)
每个CPU都有一个KPCR结构体(一个核一个)
KPCR中存储了CPU本身要用的一些重要数据: GDT, IDT以及线程相关的一些信息。
在winbbg中查看KPCR结构体

  1. kd> dt _KPCR
  2. nt!_KPCR
  3. +0x000 NtTib : _NT_TIB //子结构体
  4. +0x01c SelfPcr : Ptr32 _KPCR//指向自己,方便寻址
  5. +0x020 Prcb : Ptr32 _KPRCB//指向拓展结构体PRCB(+120那)
  6. +0x024 Irql : UChar
  7. +0x028 IRR : Uint4B
  8. +0x02c IrrActive : Uint4B
  9. +0x030 IDR : Uint4B
  10. +0x034 KdVersionBlock : Ptr32 Void
  11. +0x038 IDT : Ptr32 _KIDTENTRY//IDT表基址
  12. +0x03c GDT : Ptr32 _KGDTENTRY//GDT表基址
  13. +0x040 TSS : Ptr32 _KTSS//TSS基址
  14. +0x044 MajorVersion : Uint2B
  15. +0x046 MinorVersion : Uint2B
  16. +0x048 SetMember : Uint4B
  17. +0x04c StallScaleFactor : Uint4B
  18. +0x050 DebugActive : UChar
  19. +0x051 Number : UChar//CPU编号
  20. +0x052 Spare0 : UChar
  21. +0x053 SecondLevelCacheAssociativity : UChar
  22. +0x054 VdmAlert : Uint4B
  23. +0x058 KernelReserved : [] Uint4B
  24. +0x090 SecondLevelCacheSize : Uint4B
  25. +0x094 HalReserved : [] Uint4B
  26. +0x0d4 InterruptMode : Uint4B
  27. +0x0d8 Spare1 : UChar
  28. +0x0dc KernelReserved2 : [] Uint4B
  29. +0x120 PrcbData : _KPRCB//拓展结构体
  1. //KPCR->+0x000 NtTib : _NT_TIB
  2. kd> dt _NT_TIB
  3. ntdll!_NT_TIB
  4. +0x000 ExceptionList : Ptr32 _EXCEPTION_REGISTRATION_RECORD //异常处理链表
  5. +0x004 StackBase : Ptr32 Void//当前线程的栈底
  6. +0x008 StackLimit : Ptr32 Void//当前线程的栈边界
  7. +0x00c SubSystemTib : Ptr32 Void
  8. +0x010 FiberData : Ptr32 Void
  9. +0x010 Version : Uint4B
  10. +0x014 ArbitraryUserPointer : Ptr32 Void
  11. +0x018 Self : Ptr32 _NT_TIB//指向_NT_TIB自己
  1. //_KPCR->PrcbData(拓展结构体)
  2. kd> dt _kprcb
  3. ntdll!_KPRCB
  4. +0x000 MinorVersion : Uint2B
  5. +0x002 MajorVersion : Uint2B
  6. +0x004 CurrentThread : Ptr32 _KTHREAD//当前CPU运行的线程(运行状态)
  7. +0x008 NextThread : Ptr32 _KTHREAD//一会要切换的线程(备用状态)
  8. +0x00c IdleThread : Ptr32 _KTHREAD//如果没有要切换的线程我要跑空闲线程(空闲线程)
  9. +0x010 Number : Char
  10. +0x011 Reserved : Char
  11. +0x012 BuildType : Uint2B
  12. +0x014 SetMember : Uint4B
  13. +0x018 CpuType : Char
  14. +0x019 CpuID : Char
  15. +0x01a CpuStep : Uint2B
  16. +0x01c ProcessorState : _KPROCESSOR_STATE
  17. +0x33c KernelReserved : [] Uint4B
  18. +0x37c HalReserved : [] Uint4B
  19. +0x3bc PrcbPad0 : [] UChar
  20. +0x418 LockQueue : [] _KSPIN_LOCK_QUEUE
  21. +0x498 PrcbPad1 : [] UChar
  22. +0x4a0 NpxThread : Ptr32 _KTHREAD
  23. +0x4a4 InterruptCount : Uint4B
  24. +0x4a8 KernelTime : Uint4B
  25. +0x4ac UserTime : Uint4B
  26. +0x4b0 DpcTime : Uint4B
  27. +0x4b4 DebugDpcTime : Uint4B
  28. +0x4b8 InterruptTime : Uint4B
  29. +0x4bc AdjustDpcThreshold : Uint4B
  30. +0x4c0 PageColor : Uint4B
  31. +0x4c4 SkipTick : Uint4B
  32. +0x4c8 MultiThreadSetBusy : UChar
  33. +0x4c9 Spare2 : [] UChar
  34. +0x4cc ParentNode : Ptr32 _KNODE
  35. +0x4d0 MultiThreadProcessorSet : Uint4B
  36. +0x4d4 MultiThreadSetMaster : Ptr32 _KPRCB
  37. +0x4d8 ThreadStartCount : [] Uint4B
  38. +0x4e0 CcFastReadNoWait : Uint4B
  39. +0x4e4 CcFastReadWait : Uint4B
  40. +0x4e8 CcFastReadNotPossible : Uint4B
  41. +0x4ec CcCopyReadNoWait : Uint4B
  42. +0x4f0 CcCopyReadWait : Uint4B
  43. +0x4f4 CcCopyReadNoWaitMiss : Uint4B
  44. +0x4f8 KeAlignmentFixupCount : Uint4B
  45. +0x4fc KeContextSwitches : Uint4B
  46. +0x500 KeDcacheFlushCount : Uint4B
  47. +0x504 KeExceptionDispatchCount : Uint4B
  48. +0x508 KeFirstLevelTbFills : Uint4B
  49. +0x50c KeFloatingEmulationCount : Uint4B
  50. +0x510 KeIcacheFlushCount : Uint4B
  51. +0x514 KeSecondLevelTbFills : Uint4B
  52. +0x518 KeSystemCalls : Uint4B
  53. +0x51c SpareCounter0 : [] Uint4B
  54. +0x520 PPLookasideList : [] _PP_LOOKASIDE_LIST
  55. +0x5a0 PPNPagedLookasideList : [] _PP_LOOKASIDE_LIST
  56. +0x6a0 PPPagedLookasideList : [] _PP_LOOKASIDE_LIST
  57. +0x7a0 PacketBarrier : Uint4B
  58. +0x7a4 ReverseStall : Uint4B
  59. +0x7a8 IpiFrame : Ptr32 Void
  60. +0x7ac PrcbPad2 : [] UChar
  61. +0x7e0 CurrentPacket : [] Ptr32 Void
  62. +0x7ec TargetSet : Uint4B
  63. +0x7f0 WorkerRoutine : Ptr32 void
  64. +0x7f4 IpiFrozen : Uint4B
  65. +0x7f8 PrcbPad3 : [] UChar
  66. +0x820 RequestSummary : Uint4B //记录32个就绪链表中哪些优先级 非空
  67. +0x824 SignalDone : Ptr32 _KPRCB
  68. +0x828 PrcbPad4 : [] UChar
  69. +0x860 DpcListHead : _LIST_ENTRY
  70. +0x868 DpcStack : Ptr32 Void
  71. +0x86c DpcCount : Uint4B
  72. +0x870 DpcQueueDepth : Uint4B
  73. +0x874 DpcRoutineActive : Uint4B
  74. +0x878 DpcInterruptRequested : Uint4B
  75. +0x87c DpcLastCount : Uint4B
  76. +0x880 DpcRequestRate : Uint4B
  77. +0x884 MaximumDpcQueueDepth : Uint4B
  78. +0x888 MinimumDpcRate : Uint4B
  79. +0x88c QuantumEnd : Uint4B
  80. +0x890 PrcbPad5 : [] UChar
  81. +0x8a0 DpcLock : Uint4B
  82. +0x8a4 PrcbPad6 : [] UChar
  83. +0x8c0 CallDpc : _KDPC
  84. +0x8e0 ChainedInterruptList : Ptr32 Void
  85. +0x8e4 LookasideIrpFloat : Int4B
  86. +0x8e8 SpareFields0 : [] Uint4B
  87. +0x900 VendorString : [] UChar
  88. +0x90d InitialApicId : UChar
  89. +0x90e LogicalProcessorsPerPhysicalProcessor : UChar
  90. +0x910 MHz : Uint4B
  91. +0x914 FeatureBits : Uint4B
  92. +0x918 UpdateSignature : _LARGE_INTEGER
  93. +0x920 NpxSaveArea : _FX_SAVE_AREA
  94. +0xb30 PowerState : _PROCESSOR_POWER_STATE

3.KPCR的更多相关文章

  1. [Windows内核分析]KPCR结构体介绍 (CPU控制区 Processor Control Region)

    Windows内核分析索引目录:https://www.cnblogs.com/onetrainee/p/11675224.html 逆向分析操作系统内核代码至少需要具备两项技能: 段页汇编代码非常懂 ...

  2. Automated Memory Analysis

    catalogue . 静态分析.动态分析.内存镜像分析对比 . Memory Analysis Approach . volatility: An advanced memory forensics ...

  3. Windows中断那些事儿

    搞内核研究的经常对中断这个概念肯定不陌生,经常我们会接触很多与中断相关的术语,按照软件和硬件进行分类: 硬件CPU相关: IRQ.IDT.cli&sti 软件操作系统相关: APC.DPC.I ...

  4. 【转载】64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)

    原文链接:http://shayi1983.blog.51cto.com/4681835/1734822 本文为原创翻译,原文出处为 http://www.codemachine.com/articl ...

  5. 【内核篇】Windows内核重要变量

    ====================================================== LIST_ENTRY PsLoadedModuleList; [定  义] wrk\wrk ...

  6. x64内核内存空间结构

    0x00 前言 本文主要是讨论Windows 7 x64下的内核虚拟地址空间的结构,可以利用WiinDBG调试的扩展命令"!CMKD.kvas"来显示x64下的内核虚拟地址空间的整 ...

  7. 内核函数KiFastCallEntry

    KiFastCallEntry() 机制分析 概述 Win32 子系统 API 调用 ntdll!ZwWriteFile() 函数 ntdll!KiFastSystemCall() 函数 _KUSER ...

  8. 驱动中获取PsActiveProcessHead变量地址的五种方法也可以获取KdpDebuggerDataListHead

    PsActiveProcessHead的定义: 在windows系统中,所有的活动进程都是连在一起的,构成一个双链表,表头是全局变量PsActiveProcessHead,当一个进程被创建时,其Act ...

  9. Windows Internals学习笔记(六)Windows关键系统组件

    参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...

随机推荐

  1. Dispatch Sources(转)

    Dispatch Sources 现代系统通常提供异步接口,允许应用向系统提交请求,然后在系统处理请求时应用可以继续处理自己的事情.Grand Central Dispatch正是基于这个基本行为而设 ...

  2. Windows窗口程序从创建到关闭产生的消息

    Windows是消息驱动的,理解消息机制及消息循环是特别重要.知道在什么情况下产生什么消息会让我们对程序有更好的控制.Windows给应用程序发消息,有些会加入应用程序的消息队列,也是就是队列消息.有 ...

  3. POJ 2823 Sliding Window (滑动窗口的最值问题 )

    Sliding Window Time Limit: 12000MS   Memory Limit: 65536K Total Submissions: 41264   Accepted: 12229 ...

  4. Python GIL、线程锁、信号量及事件

    GIL是什么? GIL并不是Python的特性,它是在实现Python解析器(CPython)时所引入的一个概念.就好比C++是一套语言(语法)标准,但是可以用不同的编译器来编译成可执行代码.有名的编 ...

  5. hpuoj 1193: Interval

    Interval [STL.双指针.二分] 题目链接 http://acm.hpu.edu.cn/problem.php?id=1193 或者 题目链接 http://acm.nyist.net/Ju ...

  6. hdu-5596 GTW likes gt(模拟+优先队列)

    题目链接: GTW likes gt  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 131072/131072 K (Java/Othe ...

  7. java-执行dos命令

    import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOExce ...

  8. bzoj 2238 Mst——树链剖分

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2238 一条非树边可以对一条链的树边产生影响.注意是边,所以把边下放到点上,只要跳 top 时 ...

  9. weex 创建项目坑2

    安装成功weex 创建项目 weex create my-project 提示 需要安装 weexpack    Installing 安装失败 后来卸载weex,重新安装weex 执行下面的命令: ...

  10. 上传图片时压缩图片 - 前端(canvas)做法

    HTML前端代码: <?php $this->layout('head'); ?> <?php $this->layout('sidebar'); ?> <m ...