windows64位系统能通过dr0~dr7寄存器内核硬件断点吗
本人想写一个64位系统驱动监控内核某个地址的读写与执行情况,可以通过改写dr0~dr7寄存器的值达到下内核断点的目的吗,编写64位驱动不允许插入汇编指令,有没有其他方法实现下内核断点的目的呢,懂的大神请指点一下,谢谢,不胜感激,好人一生平安!
希望能给你带去有用的信息。
(DRx对应任意的一个调试寄存器。LENn对应任意一个长度。
Ln对应任意一个局部置位)DR0-DR7可以直接被读写操作(MOV 指令之类的,DRx可以是源操作数也可以是目的操作数) 但是,DRx的访问是需要一定权限的。
比如你用MOV操作的话,你需要在实地址模式,系统管理模式(smm)或者在保护模式(CPL设0).如果权限不够,将会在访问DRx的时候尝产生#GP(general-protection)异常
1.设置发生断点的地址(线性地址)
2.设置断点的长度(1,2,4个字节,但是执行断点只能是1)
3.设置在调试异常产生的地址执行的操作
4.设置断点是否可用
5.在调试异常产生时,调试条件是否是可用(以上直接翻译自"Intel 64 and IA-32 Architectures Software Developer’s Manual" volume 3。
调试寄存器的一些细节信息。下图很重要,后面的介绍都是针对这个图说的。
热门标签: