问题: 为什么我要使用硬件断点?

前人有写过 olly各种断点的不同及如何使用, 软断点就是在执行指令的prefix处写入CC, 
而硬件在硬件断点章节并没有给出如何实现, 只好看看了olly 的主程序, 
并记录如下 (代码就不列出了):

ollydbg 1.0 目前支持4个硬件断点, 在设置新断点前, 先判断断点类型(r/w/e--字节大小), 
然后轮询4个槽看看重复否, 如果可以设置, 将它写入一个数据结构:

004087E8  |.  893C85 708D4D00      mov ds:[eax*4+4D8D70], edi

之后, 当回到调试程序后, 立刻用 SetThreadContext 设置该断点, 
其中lpContext 就是指向上面的结构指针, 定义见winnt.h (x86节).

在Intel手册券三-15章, DR6 保存了发生一个debug条件的具体原因, 
如单步/条件/访问/任务切换. 当然DR7 能让中断在某个地址对于所有的任务应是sice使用的.

因此, 硬件断点是比较之保险的设置方法, 另外设置如下选项:

Use hardware breakpoints to step=1

通过trace功能比较, 也发现hardware断点类型执行效率比它高.