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

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

212 浏览 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
#17 2026-06-01 21:08:56
Safengine Shielden 保护程序 有反硬件断点 无法劫持
#18 2026-06-01 21:08:56
院士


希望大佬编译个vs2013版的。[em_13]

增加了一个其它语言调用示例,你自己封装一下就是可以在其它版本或语言调用了!
#19 2026-06-01 21:08:56
希望大佬编译个vs2013版的。
‹ 上一页 1 2 下一页 ›

请登录后参与讨论

立即登录 注册账号