之前的笔记搬运
断点
0x1 异常中断(软断)
1 | 原理: |
需要注意的是: 异常指令尽量选择1字节的指令, 超过一字节,
如果下断的位置原指令为1字节, 而原指令后是控制流程的指令的话,
那么就可能会应该代码流程
0x2 内存断点
原理:
内存访问断点,将目标内存的访问权限设置为PAGE_NOACCESS,当被调试程序对这个内存进行任何“读、写或运行”操作时,都会触发异常。
内存写入断点,将目标内存的访问权限设置为PAGE_EXECUTE_READ,当被调试程序对这个内存进行“写”操作时触发异常
0x3 硬件断点
原理:
在CPU内部有7个寄存器用来控制硬件断点, 分别是DR0 ~ DR7
Dr0 ~ Dr3:
用于设置硬件断点,即在调试器中经常使用的bpm断点,由于只有4个断点寄存器,所以最多只能设置4个bpm断点,产生的异常是STATUS_SINGLE_STEP
Dr4 ~ Dr5: 保留寄存器
Dr6:
1 | BD置位表示是GD位置位情况下访问调试寄存器引发的陷阱。 |
Dr7:
1 | 0~7位: Lx与Gx用于控制Drx是全局断点还是局部断点,如果Gx置位则是全局断点,Lx置位则是局部断点 |