【发布时间】:2018-08-19 18:22:03
【问题描述】:
我正在尝试在 Windows 上编写一个简单的调试器来调试 32 位应用程序,我的机器是 64 位的。我正在使用 C 语言。
当我在指定地址添加断点(0xCC)时,我期望在debugEvent.u.Exception.ExceptionRecord.ExceptionCode中得到EXCEPTION_BREAKPOINT值
但是我得到了STATUS_WX86_BREAKPOINT(0x4000001F)。
MSDN 网站将其定义为“Win32 x86 仿真子系统使用的异常状态代码。”。对这种行为没有任何进一步的解释。
我可以像EXCEPTION_BREAKPOINT 一样处理这个异常吗?所以代码将是
switch(debugEvent.u.Exception.ExceptionRecord.ExceptionCode)
{
...
case EXCEPTION_BREAKPOINT:
case STATUS_WX86_BREAKPOINT:
HandleBreakPoint();
break;
...
}
【问题讨论】:
-
还添加了关于调试器(32/64 位)的区别。
STATUS_WX86_BREAKPOINT只有 64 位调试器,基于此可以说你运行 64 位代码 -
对于那些来自谷歌搜索
STATUS_WX86_BREAKPOINT = 0x4000001f的人:相关的 MSDN 文档是 MS-ERREF: 2.3.1 NTSTATUS Values 和 Using NTSTATUS Values。他们说:“NTSTATUS 类型在 Ntdef.h 中定义,系统提供的状态代码在 Ntstatus.h 中定义。” 对我来说,#include "Ntstatus.h"使STATUS_WX86_BREAKPOINT可用。
标签: c windows debugging breakpoints