2010-11-06 94 views
1

我想檢測我的應用程序中可能的硬件斷點。爲此,我需要讀訪問調試寄存器。直接訪問是不可能的,所以我這樣做是這樣的:訪問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,如果這很重要。

回答

1

錯誤的ContextFlags值,您需要CONTEXT_ALL包含CONTEXT_DEBUG_REGISTERS。

0

引用MSDN: 如果爲當前線程調用Wow64GetThreadContext,則該函數將成功返回;但是,返回的上下文無效。