Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.28;
Скачать: CL | DM;

Вниз

Отладка процесса с точками останова   Найти похожие ветки 

 
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 вся ветка

Текущий архив: 2010.11.28;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.009 c
15-1282111749
TStas
2010-08-18 10:09
2010.11.28
Дельфи выдаю AV во адресу... dcc32.dll


15-1280817234
Медвежонок Пятачок
2010-08-03 10:33
2010.11.28
Сомалийское пирацтво. Все очень просто.


2-1283258748
Igor_M
2010-08-31 16:45
2010.11.28
TCPClient и TCPServer


2-1283944447
Саша
2010-09-08 15:14
2010.11.28
дельфи и HTML


2-1283846165
DROWSY
2010-09-07 11:56
2010.11.28
Как можно редактировать набор из связанных таблиц?