Доступ к регистрам отладки в Windows 7 x64 - PullRequest
1 голос
/ 07 ноября 2010

Я хочу обнаружить возможные аппаратные точки останова в моем приложении. Для этого мне нужен доступ на чтение к регистрам отладки. Прямой доступ невозможен, поэтому я делаю это следующим образом:

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 ]

1 голос
/ 07 ноября 2010

Неверное значение ContextFlags, вам нужно CONTEXT_ALL, чтобы включить CONTEXT_DEBUG_REGISTERS.

0 голосов
/ 07 ноября 2010

цитирование MSDN : если вы вызываете Wow64GetThreadContext для текущего потока, функция завершается успешно;однако возвращенный контекст недопустим.

...