在Windows 7 x64上访问调试寄存器

时间:2010-11-06 21:22:53

标签: winapi windows-7-x64

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

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;

我在stdout上看到的是: cccccccc cccccccc cccccccc cccccccc ,即使我设置了hw断点。

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

2 个答案:

答案 0 :(得分:1)

ContextFlags值错误,您需要CONTEXT_ALL才能包含CONTEXT_DEBUG_REGISTERS。

答案 1 :(得分:0)

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