新手教程:断点和异常

类型

  • 最底层是 SEH (structure) 用链表实现
  • 然后是包装了 SEH 的 VEH 用函数调用实现
  • 最后是 VCH 包装了前面两个
  • 或者是 C++ 内部包装的异常机制

处理

首先是调试器 然后是程序内部的 最后是硬件层面

Dr0~Dr3 用于设置硬件断点,由于只有 4 个断点寄存器,所以最多只能设置 4 个硬件调试断点。在这 7 个寄存器里面,Dr7 是最重要的寄存器

L0/G0 ~ L3/G3:控制 Dr0~Dr3 是否有效,局部还是全局;每次异常后,Lx 都被清零,Gx 不清零。

若 Dr0 有效,L0=1 则为局部,G0=1 则为全局,以此类推

断点长度 (LENx):00(1 字节)、01(2 字节)、11(4 字节)

通过 DR7 的 LEN 控制

断点类型 (R/Wx):00(执行断点)、01(写入断点)、11(访问断点)

参考资料

重点知识

前置知识