第9-10天 常用断点

常用的断点有 INT 3断点、硬件断点、内存断点、消息断点等。
1.INT 3断点
INT3 断点的机器码是0xCC,缺点是软件很容易检测API被下断了,可以下断在下一行代码躲过检测。

2.硬件断点
最多设置4个硬件断点,和INT3断点类似,但是不会修改机器代码。所以更难被检测出。

3.内存断点
内存断点分为访问断点和写入断点,原理是对设置的地址赋予不可访问/不可写属性,当访问/写入的时候会产生异常。
调试器截获异常后判断是不是断点地址,是就中断。这样的结果就是程序执行效率非常低。
硬件断点也可以设置访问断点和写入断点。硬件访问写入断点断在触发断点的下一条指令。内存断点断点触发断点的指令处。
最后一点,对代码段我们也可以下内存访问断点。

4.内存访问一次性断点
对整个内存块设置访问断点,此为一次性断点,所在段被读取或者执行会中断。快捷键F2.
主要用在想捕捉或者返回某个模块时会用到。
还有设置内存访问断点和设置内存写入断点,不同的是他们2个不是一次性断点。

5.消息断点

与INT3断点不同的是消息断点只有窗口被创建之后才能被设置拦截。
消息断点都有4个参数分别是:具备hwnd,消息编号msg,2个32位长Long的参数。
进入W菜单,刷新,右键设置消息断点,回到程序点击按钮就会断下。
此时不要指望alt+f9或者ctrl+f9回到程序代码领空。
系统代码回到程序代码,正是.TEXT区块代码执行的时候,我们可以F2对.text区块下断点。
操作一次就可以来到消息循环处,重复几次就找到按钮代码。

6.条件断点

1.按寄存器条件中断
例如eax==0400000 或者使用命令 bp 401476 eax==0400000

2.按存储器条件中断
这里拿CreateFileA来举例子,它会经常的被调用。但想要断在某个特定文件被操作的时候
可以[STRING[esp+4]]=="C:\123.txt" 或者使用命令 bp CtreateFileA,[STRING[esp+4]]=="C:\123.txt"
如果是Unicode字符串可以bp CtreateFileW,[UNICODE[esp+4]]=="C:\123.txt"

7.条件记录断点

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

如要记录Conditional_bp.exe调用CreateFileA函数的情况,在CreateFileA函数的第一行,按Shift+F4键,出现条件记录窗口:

 在Condition(条件)域中输入要设置的条件表达式,

Explanation(说明)域中由用户自己设置一个名称,Expression(表达式)域中是要记录的内容的条件,只能设置一个表达式,如填的是[ESP+4},则要选择"Pointer to ASCII String",才能正确打印出字符串,

Pause program是指OD遇到断点时是否中断,Log value of expression是指遇到断点时是否记录表达式的值, Log function arguments是指遇到断点时是澡记录函数参数,

Never(从不),On condition(按条件),Always(永远)等条件

posted on   YXGust  阅读(282)  评论(0编辑  收藏  举报

编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本

导航

点击右上角即可分享
微信分享提示