登录  | 立即注册

游客您好!登录后享受更多精彩

查看: 10|回复: 0

驱动开发与系统原理-CPU控制块KPCR

[复制链接]

102

主题

-6

回帖

149

积分

网站编辑

积分
149
发表于 前天 23:43 | 显示全部楼层 |阅读模式

介绍

表示插了1个CPU,里面有4个物理核心,还有8个逻辑处理器(模拟核心),也就是常说的四核八线程

每个核都有一套寄存器cr0-cr8,IDT,GDT等,而KPCR结构则是用来描述这些寄存器的

dt _KPCR 查看结构体

查看核心数

dd KeNumberProcessors//包含模拟核心

获取每个核心KPRCB基地址

dd KIPROCESSORBLOCK

因此我们可以通过计算偏移获得每个核心KPCR的基地址

dt _KPCR (0x83f4ad20-0x120)

结构中常用成员

+0x000 Used_ExceptionList : 0x83f4713c _EXCEPTION_REGISTRATION_RECORD //异常链表 SEH链表 +0x004 Used_StackBase : (null) //栈基址 +0x010 ContextSwitches : 0x32bd6c //统计内核与应用层切换次数 +0x01c SelfPcr : 0x83f4ac00 _KPCR //指向KPCR自己 +0x020 Prcb : 0x83f4ad20 _KPRCB //指向KPRCB +0x024 Irql : 0x1f +0x034 KdVersionBlock : 0x83f49c00 Void//0号核心才有 +0x038 IDT : 0x80b95400 _KIDTENTRY +0x03c GDT : 0x80b95000 _KGDTENTRY +0x040 TSS : 0x801e4000 _KTSS +0x051 Number : 0 '' //CPU编号

再查看KPRCB +0x004 CurrentThread : Ptr32 _KTHREAD //当前线程 +0x008 NextThread : Ptr32 _KTHREAD //下一个线程 +0x00c IdleThread : Ptr32 _KTHREAD //系统空闲线程 0号CPU专有的结构——_DBGKD_GET_VERSION64

+0x010 KernBase : 0xffffffff`83e1f000 //内核文件基地址

+0x018 PsLoadedModuleList : 0xffffffff`83f69850 //遍历驱动的结构地址

读取当前驱动有些问题,我们可以通过驱动链表,读取下一个驱动的相关结构信息,是可以正常显示的

+0x020 DebuggerDataList : 0xffffffff`8418ffec //调试的相关信息

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|断点社区 |网站地图

GMT+8, 2025-6-14 00:27 , Processed in 0.102611 second(s), 23 queries , Yac On.

Powered by XiunoBBS

Copyright © 2001-2025, 断点社区.

快速回复 返回顶部 返回列表