前几天转了一片这样的文章
http://blog.csdn.net/nightsay/article/details/42063081
这几天在分析硬件断点的时候恍然明白了好多,打开OD在我们下硬件断点到时候
为什么只有访问,写入和执行断点,为什么每种断点只有byte,word,dword类型
为什么在查询硬件断点的时候发现硬件断点只能有4个
原理自然明了:
先回顾一下 调试寄存器:
DR0~DR3,哦,只能下4个硬件断点
在看DR7:
R/W0-R/W3:(由第16,17,20,21,24,25,28,29位控制):这个东西的处理有两种情况。
如果CR4的DE被置位,那么,他们按照下面的规则处理问题:
00:执行断点
01:数据写入断点
10:I/0读写断点
11:读写断点,读取指令不算
如果DE置0,那么问题会这样处理:
00:执行断点
01:数据写入断点
10:未定义
11:数据读写断点,读取指令不算
所以只有执行断点,访问断点和写入断点
LEN0-LEN3:(由第18.19.22.23.26.27.30位控制):指定内存操作的大小。
00:1字节(执行断点只能是1字节长)
01:2字节
10:未定义或者是8字节(和cpu的系列有关系)
11:4字节
所以只有byte,word ,dword类型
一切都清楚了,不是么?