Форум: "WinAPI";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
ВнизОтладка процесса с точками останова Найти похожие ветки
← →
Unknown user © (2009-05-08 12:46) [0]Подскажите, пожалуйста как продолжить выполнение отлаживаемого потока после события EXCEPTION_BREAKPOINT. Пишу отладчик, вот код:
BrkCnt := 0;
//запоминаем инструкцию
StartAddr := $401000 + FndLin.Offset;
ReadProcessMemory(ProcInfo.hProcess, Pointer(StartAddr),
@OrigOp, SizeOf(OrigOp), BR);
//записываем точку останова
BrkPnt := $CC;
WriteProcessMemory(ProcInfo.hProcess, Pointer(StartAddr),
@BrkPnt, SizeOf(BrkPnt), BW);
repeat
WaitForDebugEvent(Event, INFINITE);
if (Event.dwDebugEventCode = EXCEPTION_DEBUG_EVENT) and
(Event.Exception.ExceptionRecord.ExceptionCode = EXCEPTION_BREAKPOINT) then
begin
Inc(BrkCnt);
//пропускаем останов на первой исполняемой инструкции
if BrkCnt > 1 then
begin
//останавливаемся в нужном месте
...
//восстанавливаем инструкцию в точке останова
WriteProcessMemory(ProcInfo.hProcess, Pointer(StartAddr),
@OrigOp, SizeOf(OrigOp), BW);
//для надежности
FlushInstructionCache(ProcInfo.hProcess, nil, 0);
end;
end;
//продолжаем выполнение
ContinueDebugEvent(Event.dwProcessId, Event.dwThreadId, DBG_CONTINUE);
until False;
Останов происходит в нужном месте. Однако после восстановления измененной инструкции и запуска на дальнейшее выполнение сыпятся исключения (уже не EXCEPTION_BREAKPOINT).
Понимаю, что наверное, не выполнил всех необходимых действий после срабатывания breakpoint. Нужно ли изменять значения регистров процессора для запуска после breakpoint?
← →
Rouse_ © (2009-05-08 13:59) [1]EIP сдвинь на единицу назад, т.к. EXCEPTION_BREAKPOINT поднимается уже после выполнения INT 3
← →
Unknown user © (2009-05-08 15:52) [2]Большое спасибо, действительно EIP.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2010.11.28;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.004 c