内核调试相关变量说明
KdInitSystem
函数让内核调试引擎初始化
KiDebugRoutine
当系统分发异常时会调用KiDebugRoutine变量所指向的函数 KiDebugRoutine写入函数地址KdpStub(禁止调试) /KdpTrap(开启调试)
KeUpdateRunTime
系统的时间更新函数
KdCheckForDebugBreak
检查调试器是否发出了中断命令
KdpBreakpointTable
内核调试引擎使用一个数组来记录断点
KdEnterDebugger
将系统内核中断到调试器
KdExitDebugger
从调试器回到系统内核
KdEnableDebugger
启用内核调试器
KdDisableDebugger
禁用内核调试器
KdChangeOption
访问和修改内核中与内核调试器有关的状态。
KdReportTraceData
与ETW机制配合将追踪数据通过内核调试通信输出到调试器所在的主机上
KdSendPacket
KDCOM函数,发送数据包
KdReceivePacket
KDCOM函数,接收数据包
KeNumberProcessors
全局变量,标记CPU个数
KiSystemStartup
Ntoskrnl.exe的入口函数,调用KiSystemStartup
KiSystemStartup
KiSystemStartup为每个CPU调用HalInitializeProcessor和KiInitializeKernel
KiInitializeKernel
本函数在系统刚刚被启动而没有被完全初始化前被调用,它将初始化系统数据结构(KiInitSystem),初始化idle线程和进程结构体(KeInitializeThread),初始化CPU控制块(KeInitializeProcess),调用ExpInitializeExecute函数,开始阶段0的进一步初始化工作。本函数在系统发现新的CPU时也将被调用。
VOID
KiInitializeKernel (
IN PKPROCESS Process,
IN PKTHREAD Thread,
IN PVOID IdleStack,
IN PKPRCB Prcb,
IN CCHAR Number,
PLOADER_PARAMETER_BLOCK LoaderBlock
)
ExpInitializeExecute
本函数在主引导CPU上执行HalInitSystem(HalInitSystem为每个CPU准备中断控制器,并配置系统时钟中断,用于CPU的计时工作)。然后启动系统中断,接下来的函数调用顺序如下
CmpInitSystemVersion->ExInitSystem->KeNumaInitialize->DbgLoadImageSymbols->CmpInitSystemVersion->
ExInitializeHandleTablePackage->ObInitSystem->SeInitSystem->PsInitSystem->PpInitSystem->DbgkInitialize
PsActiveProcessHead
全局变量,指向系统中的所有进程结构链表
SMSS.EXE
会话管理器进程。创建windows子系统和登录进程WinLogon.EXE。
WinLogon.EXE
创建LSASS本地安全子系统和系统服务进程Services.EXE
KdpDebuggerDataListHead
全局变量,调试器数据链表
KdDebuggerDataBlock
数据结构,该结构包含了内核基地址、模块链表指针、调试器数据链表指针等重要数据,调试器需要读取这些信息以了解目标系统
KdComPortInUse
全局变量,HAL模块中所定义的全局变量,记录下已被内核调试使用的COM端口
KdPitchDebugger
KdDebuggerEnabled
全局变量,用来标识内核调试是否被启用
开启调试状态:*(PBYTE)KdDebuggerEnabled=0x01;
禁止调试状态:*(PBYTE)KdDebuggerEnabled=0x00;
KiDebugRoutine
函数指针,内核调试引擎的异常处理回调函数指针。当内核调试引擎活动时,它指向KdpTrap函数,否则指向KdpStub函数
KdpBreakpointTable
结构数组类型,用来记录代码断点,每个元素为一个BREAKPOINT_ENTRY结构,用来描述一个断点,包括断点地址。
内核调试相关变量说明相关推荐
- 《Linux内核设计与实现》读书笔记(十八)- 内核调试
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...
- PHP内核探索之变量(1)Zval
原文:PHP内核探索之变量(1)Zval 作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字.数组.字符串.对象还是其他,因而可以说变量是构成语言的不可或缺的基础.本文是PHP内核探索之变量 ...
- 开源项目-基于Intel VT技术的Linux内核调试器
本开源项目将硬件虚拟化技术应用在内核调试器上,使内核调试器成为VMM,将操作系统置于虚拟机中运行,即操作系统成为GuestOS,以这样的一种形式进行调试,最主要的好处就是调试器对操作系统完全透明.如下 ...
- linux内核调试技术 kprobe使用与实现
Linux kprobes调试技术是内核开发者们专门为了便于跟踪内核函数执行状态所设计的一种轻量级内核调试技术.利用kprobes技术,内核开发人员可以在内核的绝大多数指定函数中动态的插入探测点来收集 ...
- 使用WinDbg内核调试
WINDOWS调试工具很强大,但是学习使用它们并不容易.特别对于驱动开发者使用的WinDbg和KD这两个内核调试器(CDB和NTSD是用户态调试器). 本教程的目标是给予一个已经有其他调试工具使用经验 ...
- PHP内核探索之变量(1)Zval(自己看过不错儿)
作为数据的容器,我们常常需要跟变量打交道,不管这个变量是数字.数组.字符串.对象还是其他,因而可以说变量是构成语言的不可或缺的基础.本文是PHP内核探索之变量的第一篇,主要介绍zval的基本知识,包括 ...
- Linux 内核调试器 调试指南
Linux 内核调试器内幕 KDB 入门指南 Hariprasad Nellitheertha (nharipra@in.ibm.com), 软件工程师, IBM 简介: 调试内核问题时,能够跟踪内核 ...
- Linux内核调试debugfs
DebugFS,顾名思义,是一种用于内核调试的虚拟文件系统,内核开发者通过debugfs和用户空间交换数据.类似的虚拟文件系统还有procfs和sysfs等,这几种虚拟文件系统都并不实际存储在硬盘上, ...
- Linux内核调试的方式以及工具集锦
Linux内核调试的方式以及工具集锦 CSDN GitHub Linux内核调试的方式以及工具集锦 LDD-LinuxDeviceDrivers/study/debug 本作品采用知识共享署名-非商 ...
最新文章
- 感动!盲人计算机科学家研发语音浏览器,致力科技改善盲人生活
- Spring 通过工厂方法(Factory Method)来配置bean
- Python logging模块日志存储位置踩坑
- 工作35:理解自定义组件
- android volume挂载流程,Android SDCard UnMounted 流程分析(一)
- TCP通信过程大讨论
- 在java程序中怎么造成死锁_java – 了解为什么在此实现中发生死锁
- SQLPrompt关闭联网
- Lua内存泄露情况举例
- WGS84经纬度坐标与北京54坐标或者西安80坐标的关系-3
- 什么是数据可视化大屏?如何制作一个数据可视化大屏?
- Wireshark不同报文颜色的含义
- HttpClient完整使用示例
- 微信小程序基于最新版1.0开发者工具分享-小试牛刀(视频) 发布流程
- python 通达信公式函数_通达信zig函数的python实现
- 936烙铁芯发热芯型号判断
- 使用Cytoscape的NetworkAnalyzer工具计算网络相关属性
- 怎么sketch画板导出html,sketch符号和导出画板 – Sketch入门UI设计教程
- 斗地主陪练机器人出牌算法使用说明
- 亚马逊视频下载用什么工具:试试专业亚马逊视频下载器-Tuneboto Amazon Video Downloader中文版 | 亚马逊上的视频怎么下载?