常用断点总结

常用的断点有INT 3断点、硬件断点、内存断点等。

一、INT 3断点

         详细介绍参考《int 3 软中断指令》一文。

二、硬件断点

1. 硬件断点与DRx调试寄存器有关

  1)DR0~DR3:调试地址寄存器,保存需要监视的地址,如设置硬件断点;

  2)DR4~DR5:保留,未公开具体作用;

  3)DR6:调试寄存器组状态寄存器;

  4)DR7:调试寄存器组控制寄存器。

2. 硬件断点的原理

使用4个调试寄存器(DR0~DR3)来设定地址,DR7来设定状态。最多只能设置4个断点。

3. 硬件断点设置和取消

  1)设置:右击需要设置的代码行,选择“断点/硬件执行”命令;

  2)取消:单击菜单“调试/硬件断点”,在弹出的硬件断点面板中进行删除操作。

4. 硬件断点的优缺点

  1)优点:速度快,在INT 3容易被发现的地方,使用硬件断点来代替会有很好的效果;

  2)缺点:最多只能使用4个断点。

三、内存断点

1. 包括:内存写入断点和内存访问断点;

2. 原理

对所设的地址设为不可访问/不可写属性,这样当访问/写入的时候就会产生异常,OllyDbg截获异常后比较异常地址是不是断点地址,如果是就中断。

3. 优缺点

  1)优点:内存断点不修改原代码。不会像INT 3断点那样,因为修改代码被程序校验而导致中断失败,因此在遇到代码校验,并且硬件断点失灵情况下,可以用内存断点来代替。

  2)缺点:速度慢,因为每次异常时都要通过比较地址来确定是否应该停下。同一时刻只能设置一个内存断点。

四、 内存访问一次性断点

1. 设置方法

在OD中按“Alt + M”打开内存窗口,然后在要设置断点的段(.data , .text等)上按F2或者右击选择“在访问上设置断点”命令。

2. 特点

该断点是一次性断点,当所在段被读取或执行时就中断,中断发生以后,断点将被删除。

3. 用途

用来捕捉调用或返回到某个模块(如,脱壳时该类断点就非常有用)。

4. 与内存访问断点的区别

与内存访问断点的功能一样,但是内存访问断点不是一次性断点。

五、消息断点

1. 定义

消息断点使得当某个特定窗口函数接收到某个特定消息时程序中断。

2. 设置消息断点

  1)必须有个窗口(由定义可知),一般是输入序列号的窗口;

  2)单击菜单“查看/窗口”打开窗口界面,选择要设置消息断点的对象,右击,在弹出的菜单中选择“在ClassProc上设置消息断点”,在弹出的窗口中选择相应的消息类型即可;

3. 从系统代码段返回用户领空的方法:对应用程序的代码段.text区块(注意可能有多个.TEXT区一定要选应用程序的.TEXT区)设置内存断点。

六、条件断点

1. 定义

  1)在调试过程中,经常希望断点满足一定条件时才中断,这类断点称为条件断点;

  2)条件断点是一个带有条件表达式的普通INT 3断点;

2. 原理

当调试器遇到条件断点时,它将计算表达式的值,如果结果非零或者表达式无效,则断点生效,被调试程序暂停执行。

3. 常见设置条件断点的对象:寄存器、存储器、消息等。

4. 设置条件断点的方法

  1)按条件断点的快捷键“Shift + F2”打开条件断点设置窗口,输入条件;

  2)在命令行直接输入条件断点语句,如bp 401476 eax == 040000。(前提是已经安装了命令行插件)

七、条件记录断点

1. 定义

条件记录断点除了具有条件断点作用,还能记录断点处函数表达式或参数的值。

2. 快捷键

“Shift + F4”打开条件记录断点窗口。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yueliang2100

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值