论坛首页 安全工具分享区 阅读主题

[原创]C/C++ 自写补丁-设置硬件断点 x86_x64

211 浏览 18 回复
#1 楼主 2026-06-01 21:08:56
20241126 增加DLL,更新搜索算法极端情况搜索描述:
1、与软件断点与内存断点不同,硬件断点不依赖被调试程序,而是依赖于CPU中的调试寄存器。
2、调试寄存器有8个,分别为Dr0-Dr7。
3、用户最多能够设置4个硬件断点,这是由于只有Dr0~Dr3用于存储线性地址。
4、其中,Dr4和Dr5是保留的。1)Dr0-Dr3用于设置硬件断点,由于只有4个断点寄存器,所以最多只能设置4个硬件调试断点。
2)Dr7是最重要的寄存器:
L0/G0 ~ L3/G3:控制Dr0-Dr3是否有效,局部还是全局;每次异常后,Lx都被清零,Gx不清零。
断点长度(LENx):00(1字节)、01(2字节)、11(4字节)、10(8字节)
断点类型(R/Wx):00(执行断点)、01(写入断点)、11(访问断点)1)硬件调试断点产生的异常是 STATUS_SINGLE_STEP(单步异常)
2)检测Dr6寄存器的B0~B3:哪个寄存器触发的异常硬件断点设置与线程、寄存器有关,并且还有读、写、访问、字节大小等一些设置,下面用代码实现这一系列设置和删除的操作,创建一个HardwareBreakpoint.cpp,写如下内容:再创建一个HardwareBreakpoint.h文件,写如下内容:
也可使用HijackTingMix.zip静态库,库里为加强版避免了GetThreadContext和SetThreadContext被hook了,不能设置的问题,#include "HardwareBreakpoint.h"

---
来源: 看雪论坛
原文链接: https://bbs.kanxue.com/thread-283839.htm
#2 2026-06-01 21:08:56
学习学习
#3 2026-06-01 21:08:56
支持
#4 2026-06-01 21:08:56
这么块有新的了啊
#5 2026-06-01 21:08:56
楼主高产
#6 2026-06-01 21:08:56
好东西 谢谢
#7 2026-06-01 21:08:56
好东西,谢谢楼主!
#8 2026-06-01 21:08:56
学习
#9 2026-06-01 21:08:56
看看有没有源码
#10 2026-06-01 21:08:56
学习学习
#11 2026-06-01 21:08:56
10年前用这个方案做过war3的外挂,避免crc校验。
#12 2026-06-01 21:08:56
好东西,谢谢楼主!
#13 2026-06-01 21:08:56
Thanks for sharing
#14 2026-06-01 21:08:56
感谢分享
#15 2026-06-01 21:08:56
Thanks for sharing
#16 2026-06-01 21:08:56
下载凭证已过期,请刷新页面重新尝试下载。刷新一下网页,可以下奇怪

最后于 2024-10-10 11:26
被xie风腾编辑

,原因:
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号