1. INT3断点(CC断点)
- 设置方式:直接按F2键或使用bp命令设置。
- 原理:当执行一个INT3断点时,该地址处的内容被调试器用INT3(机器码是0xCC)指令替换。OllyDbg隐藏INT3指令,显示出来的仍然是中断前的指令。当调试进程执行INT3指令导致一个异常时,调试器会捕捉这个异常,从而停在断点处,然后将断点处的指令恢复成原来的指令。
- 优点:可以设置无数个断点。
- 缺点:改变了机器码,容易被软件检测到。
2. 硬件断点
- 设置方式:右键单击要断点的位置,选择“Breakpoint”->“Hardware, on execution”或使用命令行设置HE地址。
- 原理:硬件断点和DRx调试寄存器有关,使用DR0、DR1、DR2、DR3设定地址,并使用DR7设定状态,因此最多设置4个断点。
- 优点:速度快,不容易被发现。
- 缺点:只能设置4个断点,且需要在触发断点的下一条指令处下断。
3. 内存断点
- 设置方式:在数据/代码窗口选中需要下断点的地址区域,右键单击,选择“Breakpoint”->“Memory, on write”或“Memory, on access”。
- 原理:对所设地址赋予不可访问/不可写属性,当访问/写入时就会产生异常。OllyDbg截获异常后,比较异常地址是否是断点地址,如果是就中断。
- 优点:不修改原始机器码,不容易被检测到。
- 缺点:每次出现异常都需要进行判断是否为断点,会降低OllyDbg的执行