2

我想在我的应用程序上检测可能的硬件断点。为此,我需要对调试寄存器进行读取访问。直接访问是不可能的,所以我这样做:

HANDLE thread = GetCurrentThread();

WOW64_CONTEXT context;
context.ContextFlags = CONTEXT_FULL;
BOOL status = Wow64GetThreadContext(thread, &context);

if (!status)
    return -1;

std::cout << std::hex << context.Dr0 << " " << context.Dr1 << " " << context.Dr2 << " " << context.Dr3 << " " << std::endl;

我在标准输出上看到的是:cccccccc cccccccc cccccccc cccccccc即使我设置了硬件断点。

我是否需要一些特殊权限才能访问这些寄存器?该应用程序是 32 位的,但如果这很重要,我正在使用 Windows 7 x64。

4

2 回答 2

1

错误的 ContextFlags 值,您需要 CONTEXT_ALL 来包含 CONTEXT_DEBUG_REGISTERS。

于 2010-11-06T21:34:41.093 回答
0

引用MSDN:如果为当前线程调用 Wow64GetThreadContext,则函数返回成功;但是,返回的上下文无效。

于 2010-11-06T21:30:15.290 回答