Как получать уведомления об изменениях цели из моего расширения WinDbg или как работает ChangeDebuggeeState?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как получать уведомления об изменениях цели из моего расширения WinDbg или как работает ChangeDebuggeeState?

Сообщение Anonymous »

Мне нужно иметь возможность получать уведомление от моего расширения WinDbg, когда виртуальная или физическая память цели изменяется с помощью флагов DEBUG_DATA_SPACE_VIRTUAL или DEBUG_DATA_SPACE_PHYSICAL.
Я надеялся использовать для этого обратный вызов ChangeDebuggeeState .
Я написал свой собственный класс MyCallbacks, реализующий интерфейс IDebugEventCallbacksWide. Затем я использовал его в SetEventCallbacksWide из обратного вызова DebugExtensionInitialize, как такового:

Код: Выделить всё

CComPtr pDebugControl;
DebugCreate(IID_PPV(pDebugControl));

CComPtr pDbgClient;
pDebugControl->QueryInterface(IID_PPV(pDbgClient));

MyCallbacks* pC = new MyCallbacks;
pDbgClient->SetEventCallbacksWide(pC);
Метод AddRef моего класса MyCallbacks вызывается после приведенной выше последовательности, а также GetInterestMask, где я указываю, что именно я хочу перехватить:< /p>

Код: Выделить всё

HRESULT STDMETHODCALLTYPE MyCallbacks::GetInterestMask(
_Out_ PULONG Mask
)
{
*Mask = DEBUG_EVENT_CHANGE_DEBUGGEE_STATE;

return S_OK;
}
Но когда я работаю с WinDbg, проходя через живую цель, моя реализованная функция ChangeDebuggeeState никогда не вызывается. Где я ожидаю его вызова, поскольку виртуальная/физическая память цели изменяется.
Есть идеи, что я делаю неправильно?
PS . Я попытался немного его настроить и использовал маску DEBUG_EVENT_BREAKPOINT для GetInterestMask, а затем проверил, вызывался ли мой метод IDebugEventCallbacksWide::Breakpoint, когда в WinDbg была достигнута точка останова ядра - и мой обратный вызов тоже никогда не вызывался.

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-how-does
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»