调试时使用的 7 种断点

1、int3 断点,机器码为 0xCC ,因此又叫做 CC 断点 —— n 个

实现方法是比如:将某一行汇编进行了 F2 下断,那么这一行汇编对应的机器码的第一个字节将被改写为 CC ,尽管调试器不会显示,但是实际上已经进行了更改,调试器在执行到这里检测到了 0xCC 之后就会断下。

 

2、硬件断点,通过 DRx 调试寄存器实现 —— 4 个

DRx 调试寄存器有 8 个:DR0 ~ DR7,其中 DR0 DR1 DR2 DR3 用于保存需要监视的地址,即设置硬件断点,因此最多设置 4 个硬件断点,并通过 DR7 设置状态。硬件断点的效果与 int 3 一样,但是硬件执行断点并不会改写机器码,因此更难检测到,而且硬件断点是断在下一条指令位置。

 

3、内存断点 —— 1 个

OD 可以设置内存访问断点、内存写入断点。原理是将用户要断点的内存地址设置成 不可读不可写,这样一旦进行读写,则会异常,比较地址之后如果是用户指定的断点地址,则中断。正因为要进行大量的比较,因此比较慢,OD 只能设置一个。

 

4、内存段访问一次性断点

Alt + M 可以看到程序对应的虚拟内存分为了一个个内存段页,OD 右键可以设置属性以及对整个段下断点,脱壳时比较有用。

 

5、消息断点

基于 windows 的消息机制,每个消息都会有对应要处理的对象,对象对应唯一的句柄,OD 的 w 按钮中包含了该程序所有的 句柄,右键即可对比如一个 check 按钮下断点,断下时位于系统代码, alt + f9 是回不去的,需要用到 4、内存段访问一次性断点,可以对 .text 下断,F4。

 

6、条件断点,本质是带有条件表达式的 int 3

 

7、条件记录断点,不看

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值