实现硬件断点调试器11

硬件点的实现功能有:(断下,硬件访问,硬件写入)类型 byte,word,dword

英特尔硬件设计中:DR0~DR3是存放断下地址硬件,DR4~DR5为保留的。DR6是状态硬件说明引起断点的原因,DR7是触发硬件控制位

硬件断点产生的 异常是STATUS_SINGLE_STEP也就是单步(如果有别的单步需要多条件处理)

单步寄存器位 TF=0 是置触发L0 TF=1 是置G0触发

G0是全局断点,L0是局部断点,但是windows只能设置局部断点L0

G1L1~G3L3是用来控制 dr1~dr3 断点触发(前提是已经存放需要断下的地址进去了)

R/W0~R/W3 触发断点条件 00b只执行 01b写入数据 10b i/o端口 11b读写

GD 用于保护DRx =1 则会进入1号陷阱 保证调试器完全控制DRx

DR6的 B0~B3 判断 DR0~dr3 谁引发的调试陷阱

第一步:设置 iDr0存放地址 与触发条件

触发后就会进入单步异常

第二步:

单步异常触发框架,DR6的 b0~b3用来判断

以DR6为例的b0置1为例,先把dr7复原,fegFlag置TF单步标志=1,g_isBPHStep单步触发=true进行下次单步判断定义触发开关

在单步call里 判断是否继续单步,把DR0硬件断点设置触发,单步触发开关复原false,DBG_CONTINUE表示异常已经处理不往外抛

第三种 触发有条件的硬件断点

把esp作为地址来触发

单步call 判断是否继续单步

--------------------------------------------------------结束

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值