硬件断点始终为 EXCEPTION_SINGLE_STEP

2024-02-02

我有一个充当调试器的程序。我为线程设置了一个 hw bp,将 dr0 设置为我想要 bp 所在的地址,并将 dr7 设置为 1,因为我希望 bp 在每次执行该地址时生成一个事件。

它有效,但现在的问题是我一直没有停止接收 EXCEPTION_SINGLE_STEP 。我像平常一样使用 WaitForDebugEvent 创建了一个循环:

DebugActiveProcess(pid);
while (flag == 0)
    {
        WaitForDebugEvent(&DBEvent, INFINITE);
        if (first_time){
            setHWBPInCurrentThreads(pid, breakpoint_address);
            first_time = 0;
        }
        switch (DBEvent.dwDebugEventCode)
        {
            // Here we check if a new thread is created and we set a BP for all of them
            case CREATE_THREAD_DEBUG_EVENT: 
            {
                HANDLE thread_handle = DBEvent.u.CreateProcessInfo.hProcess;
                HANDLE hX3 = SetHardwareBreakpoint(thread_handle, HWBRK_TYPE_CODE, HWBRK_SIZE_1, breakpoint_address);

            }break;

            case EXCEPTION_DEBUG_EVENT:
            {
                switch (DBEvent.u.Exception.ExceptionRecord.ExceptionCode)
                {
                case EXCEPTION_SINGLE_STEP:
                {       
                    printf("%d\n", DBEvent.dwThreadId);
                    ///MessageBoxA(0, "yesssssssss", "", 0);
                }break;

                case EXCEPTION_BREAKPOINT:
                {
                    //MessageBoxA(0, "Found break point", "", 0);

                }break;
                }
            }break;

        }

        ContinueDebugEvent(DBEvent.dwProcessId, DBEvent.dwThreadId, DBG_CONTINUE);
                }

这里有什么问题吗?我应该怎么做才能让异常消失并仅在下次执行该地址时获得控制权?


即使在命中断点后,您的实现也只是继续调试事件,这将在无限循环中再次触发断点。

正确的实施需要根据您使用的环境进行不同的处理。如果您在比 Windows XP 更新的环境中进行调试,则处理断点的方式将是:

  1. 设置恢复标志 (EFLAG)。
  2. 继续调试事件(ContinueDebugEvent)。

如果您在 Windows XP 环境中工作,则您的实现需要更改为:

  1. 禁用断点(Dr7)。
  2. 设置陷阱标志 (EFLAG)。
  3. 继续调试事件(ContinueDebugEvent)。
  4. 等待由陷阱标志引起的 EXCEPTION_SINGLE_STEP(您现在处于下一条指令)。
  5. 启用断点(Dr7)。
  6. 继续调试事件(ContinueDebugEvent)。

很抱歉打扰这个旧线程,但是,这些是正确的实现。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

硬件断点始终为 EXCEPTION_SINGLE_STEP 的相关文章

  • 为什么我会收到未找到分析器的警告?

    我创建了一个玩具项目来检查最新的 NET 7 预览版 5 和正则表达式代码生成 它效果很好 所以我对现有项目应用了相同的更改 不是为了生产 而是为了个人生产力 由于某种原因 我收到这些警告 CS8032 An instance of ana
  • 生成多个随机数

    我想生成 25 个唯一的随机数并将它们列在控制台中 数字的长度应至少为 10 个字符 有什么简单的方法可以做到这一点吗 尝试将数字构建为字符串 并使用 HashSet 确保它们是唯一的 Random random new Random Ha
  • STL之类的容器typedef快捷方式?

    STL 容器的常见模式是这样的 map
  • 深拷贝和动态转换 unique_ptr

    假设我有一个如下所示的类 class A virtual A class B public A class C public A 我还有一个 unique ptr 向量 它是这样声明的 std vector
  • 使用 C# 将多个音频样本混合到单个文件中

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个能够创建音频文件 mp3 或 wav 的库 NAudio http www codeple
  • 局部函数声明有什么用处吗?

    大多数像我这样的 C 程序员都曾犯过以下错误 class C int main C c declares a function c taking no arguments returning a C not as intended by m
  • 嵌入资源文件的路径

    我的资源文件中有一个图标 我想引用它 这是需要图标文件路径的代码 IWshRuntimeLibrary IWshShortcut MyShortcut MyShortcut IWshRuntimeLibrary IWshShortcut W
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • Monotouch全局异常处理

    我在野外发现了一只令人讨厌的虫子 但我无法确定它的具体情况 有没有办法拥有全局 Try Catch 块 或者有办法处理 Monotouch 中未处理的任何异常 我可以包起来吗UIApplication Main args 在 try cat
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 应用程序处于中断模式。您的应用程序已进入中断状态,

    我发现自己遇到了同样的问题here https stackoverflow com questions 36204009 disable break mode page in vs2015 我在 dll 中使用 Windows 窗体 这是针
  • 如何让XmlReader读取C#中的属性?

    我有一个 XML Stream 其中包含以下 XML 内容
  • 我可以将 UseCSharpNullComparisonBehavior 用于单个查询吗?

    我有一个查询 该查询曾经是存储过程 现已转换为 EF 查询 现在已经超时了 使用 SQL Profiler 我可以看到生成的 SQL 的唯一区别是 EF 转变的新行为entity Property value into entity Pro
  • 配置:错误:无法运行C编译的程序

    我正在尝试使用 Debian Wheezy 操作系统在我的 Raspberry Pi 上安装不同的软件 当我运行尝试配置软件时 我尝试安装我得到此输出 checking for C compiler default output file
  • 传递数组时在 C 中的函数参数中强制指定数组大小

    Context 在 C 中 我有一个以数组作为参数的函数 该参数用作该函数的输出 输出的大小始终相同 我会 让阅读代码的人清楚所需的大小 不过它已经在函数注释中了 理想情况下 编译会输出警告或错误 这样我就可以在编译时而不是运行时防止出现问
  • Gremlin.net 文本包含等效项

    我正在使用 Gremlin net 库连接到 janus 图形服务器 我使用 cassandra 和弹性搜索进行数据存储和索引 在我使用的 gremlin 语言和 gremlin 控制台中文本包含在属性的文本中进行搜索 我正在使用混合索引
  • C++ 中是否有与 PHP 的explode() 函数等效的函数? [复制]

    这个问题在这里已经有答案了 可能的重复 在 C 中分割字符串 https stackoverflow com questions 236129 splitting a string in c 在 PHP 中 explode 函数将获取一个字
  • 选择合适的IDE

    您会推荐使用以下哪种 IDE 语言来在 Windows 下开发涉及识别手势并与操作系统交互的项目 我将使用 OpenCV 库来执行图像处理任务 之后 我将使用 win32 API 或 NET 框架与操作系统交互 具体取决于您建议的工具 性能
  • 使用多态对象数组进行 JSON 反序列化

    我在涉及多态对象数组的 JSON 反序列化方面遇到问题 我已经尝试过记录的序列化解决方案here https stackoverflow com questions 5186973 json serialization of array w
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机

随机推荐

  • Session具体是做什么的?为什么不把ip和域名session看成一样呢?

    我想知道session具体有哪些 这不限于一种语言 下面仅以 php 为例 我使用 php session 当我使用我的网站域名时它运行良好 为了在 Windows 操作系统上的本地 vmvare ubuntu 中测试该网站 我更改了 Wi
  • 从中心即时裁剪图像 - Javascript?

    我有一堆图像 它们的宽度和高度各不相同 有些是正方形 有些是矩形 但我希望它们全部都是我选择的宽度和高度 我知道我可以在中使用 width 和 height 那么 我正在寻找的是一个可能的 javascript 解决方案 也许使用 jQue
  • 扩展默认类(SmallInteger)

    我正在尝试使用新的实例方法 square 来扩展 SmallInteger 类 我的想法是我希望能够调用 5 square 它会返回 25 使用实例方法扩展您自己的类相当简单 因为您知道变量名称 但我不知道 SmallInteger 类中的
  • 替换所有与正则表达式匹配的匹配项

    我有一个正则表达式 用于搜索包含以下内容的字符串 00 or 11 如下 00 11 我想做的是将所有与模式匹配的出现替换为 X00X or X11X 例如 字符串 00 0 11 会导致 X00X 0 X11X 我正在研究 Python
  • 使用 ReactJS 映射数组的数组

    所以我想做的是映射数组的数组 首先 我从简单开始并开始工作 一个简单的国家 地区数组 嗯 国家 地区代码 countries map value index gt return span h2 Hello world h2 hr span
  • 在 CustomScrollView 中使用 StreamBuilder 和 SliverLists

    我正在尝试使用StreamBuilder获取数据 我想使用显示该数据SliverList全部在一个CustomScrollView这样我就可以利用附带的功能CustomScrollView 关于如何实现这一目标有什么想法吗 当然 这很简单
  • 使用单个控制器控制多个 html5 音轨

    我正在尝试为网站实现一个非常小的音频播放器 界面相当简单 它有一个播放 暂停按钮和一个静音 取消静音按钮 我遇到的问题是为不同的曲目实现同一播放器的多个实例 播放器的 javascript 是 jQuery function var myA
  • 多个 ACS 网址

    我们使用 PingFederate 进行 SSO 并且是 SP 发起的 Ping Federate 将像 Idp 一样行事 对于应用程序 有 2 个网络服务器 用于高可用性 我的问题是 1 我们可以提供两个默认的url 在控制台中只能设置一
  • 如何使用 Gson 反序列化 ConcurrentMap

    我正在尝试反序列化一个具有ConcurrentMap但我得到了一个例外 Caused by java lang IllegalArgumentException Can not set java util concurrent Concur
  • 访问 Meteor 中的 node.js 文件系统模块

    我正在创建一个网络应用程序 它将编辑存储在用户硬盘上的一些配置文件 并决定尝试一下 Meteor 我想使用 Node js 的文件系统模块来处理配置文件的 I O 但我无法弄清楚如何包含该模块 经过一番搜索 我在 StackOverlow
  • 使用 Google Drive .NET API 创建文件的空响应

    我正在尝试使用 Google Drive NET API v3 将文件上传到我的云端硬盘 我的代码如下 static string Scopes DriveService Scope Drive DriveService Scope Dri
  • CUDA:从内核调用 __device__ 函数

    我有一个内核调用deviceif 语句中的函数 代码如下 device void SetValues int ptr int id if ptr threadIdx x id question related to here ptr thr
  • 部署 lambda 函数时如何从无服务器获取 API 网关 ID 作为输出部分

    我想在无服务器的输出部分获取API网关的ID 然后将其转换为我的API URL https fgh5t4tjm2 execute api us east 1 amazonaws com dev 在另一个无服务器中使用 下面是我通过在无服务器
  • 相同的片段、edittext 和 requestfocus 问题

    很抱歉再次就此事寻求帮助 但所有其他帖子都没有帮助 场景如下 我有一个活动 A 其中包含一个布局 其中有一个片段 该片段根据用户输入进行交换 其中一个片段里面有一个编辑文本 我想专注于创建并显示该死的软键盘 因此 在我使用的片段的 onCr
  • PHP:如何将正则表达式转换为示例匹配?

    我有一个用于匹配 URI 的正则表达式 例如 preg match my uri i my uri whatever 我用它来路由 例如 http www mywebsite com my uri page html http www my
  • 在 pandas 中为 python 创建虚拟变量

    我正在尝试使用 python 中的 pandas 从分类变量创建一系列虚拟变量 我遇到过get dummies函数 但每当我尝试调用它时 我都会收到一个错误 指出名称未定义 任何创建虚拟变量的想法或其他方法将不胜感激 EDIT 由于其他人似
  • 将一系列趋势线方程获取到形状文本框

    我试图将图表中第一个系列的趋势线方程获取到工作表上其他位置的形状文本框 但是 只有当我逐行执行代码时 我才能正确填充文本框 在运行时它没有效果 For Each chtObj In ActiveSheet ChartObjects Set
  • 如何获取联系人照片 URI

    我正在与 Android Contact ContentProvider 合作 我有一个电话号码我需要得到URI of the Photo与此电话号码关联的联系人 我该怎么做 我知道我可以得到raw data照片并构建输入流 但我不需要输入
  • 在 jQuery 中向给定日期添加天数[重复]

    这个问题在这里已经有答案了 我有一个包含三个字段的表单 start date days end date 我想通过在开始日期上添加天数来获取结束日期 我的 jQuery 代码是 days change function var start
  • 硬件断点始终为 EXCEPTION_SINGLE_STEP

    我有一个充当调试器的程序 我为线程设置了一个 hw bp 将 dr0 设置为我想要 bp 所在的地址 并将 dr7 设置为 1 因为我希望 bp 在每次执行该地址时生成一个事件 它有效 但现在的问题是我一直没有停止接收 EXCEPTION