包括INT3断点、硬件断点、内存断点和消息断点。
https://blog.csdn.net/qq_15054345/article/details/140901621
根据提供的技术原理,以下用生活化例子解释四种断点,老人和小孩都能理解:
—
1. INT3断点(软件断点)
– 原理:在程序代码中插入特殊指令(0xCC),执行到此处时触发中断 。
– 生活例子:
– 小明每天走固定路线去学校(程序正常执行)。妈妈偷偷在路口放了一个会响的警报器(插入0xCC指令)。小明踩到警报器时,铃声大作(触发中断),妈妈立刻跑过来检查他是否带了作业(调试器介入)。但小明如果发现警报器(反调试),就会绕路避开。
– 特点:
– ✅ 可设置无数个断点,但易被发现(如检测代码是否被修改)。
– ❗ 类似“陷阱”,触发后需恢复原状(调试器替换回原指令)。
—
2. 硬件断点
– 原理:用CPU的专用寄存器(DR0-DR3)监控地址,触发时中断 。
– 生活例子:
– 爷爷戴了智能手表(CPU寄存器),家人设定了“走到河边就报警”(监控特定地址)。爷爷接近河边时,手表震动报警(硬件中断),家人赶来阻止危险。但全家只有4块手表(最多4个断点)。
– 特点:
– ✅ 隐蔽性强(不修改代码,难被察觉)。
– ❗ 资源有限(仅4个位置)。
—
3. 内存断点
– 原理:将内存区域设为“禁止访问/写入”,触发异常时中断 。
– 生活例子:
– 爸爸在零食柜贴了封条(设为不可访问)。孩子偷零食时撕开封条(触发异常),爸爸听到声音赶来(调试器捕获)。但封条会挡住整个柜子(影响整个内存页),即使孩子只碰一包薯片也会报警。
– 特点:
– ✅ 不修改代码,可监控大范围内存 。
– ❗ 效率低(整页内存受监控,无关操作也可能触发)。
—
4. 消息断点
– 原理:在程序接收特定消息(如点击按钮)时中断 。
– 生活例子:
– 奶奶的手机设置了“陌生来电拦截”(监控特定消息)。骗子打电话时(如弹出诈骗窗口),手机自动挂断并发出警报(触发中断),子女立刻来查看(调试器介入)。
– 特点:
– ✅ 适合交互式程序(如点击按钮、输入文本)。
– ❗ 可能停在系统代码中,需二次定位 。
x64dbg 中设置 Win32 API 函数的断点,通常属于 软件断点(Software Breakpoint)。
为什么是软件断点?
软件断点 是通过在指定的地址上替换原始指令为 INT 3(或者其他触发断点的指令)来实现的。
Win32 API 函数 是通过程序的调用指令来执行的,而在调用的函数入口处,调试器通过修改该地址处的机器指令(通常是 INT 3 指令)来实现断点。
x64dbg 通过设置软件断点来捕捉对 Win32 API 的调用(比如 MessageBoxA、CreateFile 等)。当程序执行到这些 API 函数的入口点时,调试器会停止执行并触发断点,允许你检查调用的参数或程序状态。
如何设置断点?
通过地址设置:
如果你知道目标 API 函数的地址,你可以直接设置断点在该地址。
通过符号设置:
使用 x64dbg 的符号解析功能,你可以直接在 Win32 API 函数名称上设置断点(如 MessageBoxA)。x64dbg 会自动找到该函数的地址,并将其替换为 INT 3 来设置软件断点。
类型总结:
软件断点(Software Breakpoint):通过修改指令实现,通常用于函数入口、特定代码段等。它与硬件断点的区别在于,它是通过改变内存中的指令来工作,而不是通过处理器硬件的调试寄存器。









