断点的种类

CC 断点

又叫 int3/F2 断点,软件执行 int3 指令时程序就会暂停,int3 指令的机器码就是CC。设置完 CC 断点后,原本位置的机器码会被调试器改成 0xCC(并对原来的数据备份),程序执行到 0xCC 时程序就会暂停(调试器所为)。

所以也就是说如果在没有调试器的情况下如果我们程序里有 0xCC,程序也不会暂停。

优点:可以设置无数个
缺点:容易被检测到

内存断点

分为:
(1)内存执行断点
把机器码当成程序执行时被断下。
(2)内存写入断点
改写这部分机器码时被断下。
(3)内存访问断点
访问 = 执行 | 写入。

设置内存断点后,调试器会在你下断点的内存页增加一个 PAGE_NOACCESS 属性,这个属性会把当前内存页设为禁止任何形式的访问,如果进行访问会触发一个内存访问异常,之后调试器会捕获这个异常,判断这个异常触发的位置和你下断点的位置是否一样,一样则接管异常并暂停程序运行,不一样则放行。

优点:相比 CC 断点,不容易被检测到。
缺点:只能设置一个(新设置的内存断点会覆盖原有的内存断点),在调试器中没有对应的记录窗口,程序重新加载后消失。

硬件断点

在寄存器中,有这么一些寄存器,它们用于调试。人们把他们称为调试寄存器,调试寄存器一共有8个名字分别从Dr0-Dr7。
Dr0-Dr3 存放中断的地址,Dr4,Dr5一般不使用(保留),Dr6,Dr7 记录在 Dr0-Dr3 中下断的地址的属性。

硬件断点最不容易被断下,分为三种:
(1)硬件执行断点。
(2)硬件写入断点。
(3)硬件访问断点。

硬件断点生效时他会先执行符合条件的代码,执行完后才停下,而内存断点和CC断点在即将执行符合条件的代码处被断下。

优点:更难被检测,程序重新加载后不消失。
缺点:只能设置有限的个数,

条件断点

达到设置的条件时才触发的断点(某种自己设置的逻辑表达式)。

条件记录断点

条件记录断点除了具有条件断点作用,还能记录断点处函数表达式或参数的值,也可以设置通过断点的次数,每次符合暂停条件时,计数器减一。

你可以在一个被反复调用的函数段首下条件记录断点。筛选每一次调用传入的参数,在合适的时机断下。

消息断点

消息断点是对条件记录断点的应用,是针对一个特殊函数:winproc函数的 Message 参数设置的件记录断点 。

windows是基于消息的操作系统,每一个消息都按照相同的格式被写入一个结构体,这个结构体叫MSG。消息发生后windows把该结构体传给WinProc函数,用它来执行消息处理功能。

可以在W窗口中,针对程序窗体消息设置消息断点。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值