断点分类

int3 软件断点

临时在代码插入CC命令

引发EXCEPTION_BREAKPOINT 0x80000003异常

内存断点 

将想下断地址所在内存页增加一个名为PAGE_NOACCESS(写入时设为PAGE_EXECUTE_READ)的属性,引发异常再判断地址是否为断点位置,以页为单位,慢但是可以多个。

引发STATUS_GUARD_PAGE_VIOLATION(0x80000001)异常。

硬件断点 DR0~DR7

DR0到DR3调试地址寄存器,用来保存断点地址,

DR4到DR5保留,当调试扩展功能被启用(CR4的寄存器DE位设置为1),任何对DR4和DR5的引用都会导致一个非法指令异常(#UD),当此功能被禁止时,DR4和DR5分别是DR6和DR7的别名寄存器,等价于后者。

DR6到DR7用来控制断点大小和出发时机。触发造成STATUS_SINGLE_STEP单步异常0x80000004断点。DR6的作用是当调试事件发生时,向调试器报告事件详细信息,以供调试器判断是何种事件。

Dr7,有24位被划分位4组对应4个调试地址寄存器,比如L0,G0,R/W0,LEN0这6为与DR0对应,

比如R/W0-3是00时执行此地址中断,01是写入中断,10是通过把CR4寄存器DE(调试拓展)位设为1启用该组合,即当向相应地址进行I/O读写时中断,11是读写数据都中断,但是从该地址读取指令除外。

LEN0-3是两位,00是1字节,01是2字节,10是8字节。11是4字节

L0-3是局部断点启用。1是启用,0是静止。

G0-3是全部断点启用,与L0不同的是,断点条件发生,CPU不会清除此断点。

LE和GE 启用局部或者全局精准断点,486之后都忽略的。

GD 启用访问检测,启用或禁止对调试寄存器的保护,为1是,cpu检测到将修改DR0到7的指令,cpu会在执行前产生一个调试异常

参考资料

《软件调试》张银奎

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值