Возникла такая проблема. Внедрил в прогу ддл, которая использует аппаратные точки для контроля проги. Ставлю обработчик по примеру с васма. Но до моего обработчика дело не доходит. Где могут быть грабли?
coderess сорри, я кажется ошибся насчет обработчика в проге. но все равно, точка остановки не срабатывает. что может быть не так?
дело даже не в конкретной проге. интересна теория.
еще интересное замечание.
когда запускал прогу из своего ланчера, в котором ставил аппаратную точку, то при запуске проги вываливалось окно о необработанном исключении EXCEPTION_SINGLE_STEP.
как только внес код в длл и вклинил в процесс, перестало исключение вылетать.
> когда запускал прогу из своего ланчера
Диспетчер исключений должен быть глобальным в процессе, иначе и будет необработанное исключение, если оно в сех не обрабатывается.
а не срабатывание точек останова (или даже не установка их) может быть связана с версией вендов или компилятора? кучу примеров перебрал, ничего не работает
пример немного поправленный с васма.
его прицепляю к ноутпаду, можно к любой своей тестовой проге, не важно.
все messagebox'ы срабатывают, кроме тех, что должны срабатывать при вызове MyFunc2 (в самом MyFunc2 тоже срабатывает)
Code:
#include "windows.h"
void*breakpoint;
BOOL SetBreakPoint(void*dwAddress )
{
CONTEXT ct;
HANDLE hThread = GetCurrentThread();
ct.ContextFlags = CONTEXT_DEBUG_REGISTERS;
if(!GetThreadContext( hThread,&ct ))
return FALSE;
ct.Dr0 =(DWORD)dwAddress;
ct.Dr6 =0;
ct.Dr7 =( ct.Dr7 & 0xFFF0FFFF )| 0x101;
MessageBox(NULL,L"qqqqqqq",L"qqqqqq",MB_OK);
return SetThreadContext( hThread,&ct );
//return true;
}
LONG WINAPI MyVectoredHandler( PEXCEPTION_POINTERS ExceptionInfo )
вообщем есть трабла. вкратце, при исключении EXCEPTION_SINGLE_STEP если я не сброшу бит в др7, то оно будет снова и снова. так и должно быть, или у меня руки кривые?
SReg ну если про бряки, поймал исключение, обработал, если твоё - сделал чо надо и сбросил бит, не твоё - шлёшь нахер и пускаешь дальше и т.д. Ты ж сам модуль по хардварным брякам переписывал.