Конференция "WinAPI" » Отладка процесса с точками останова
 
  • Unknown user © (08.05.09 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_ © (08.05.09 13:59) [1]
    EIP сдвинь на единицу назад, т.к. EXCEPTION_BREAKPOINT поднимается уже после выполнения INT 3
  • Unknown user © (08.05.09 15:52) [2]
    Большое спасибо, действительно EIP.
 
Конференция "WinAPI" » Отладка процесса с точками останова
Есть новые Нет новых   [134435   +33][b:0][p:0.001]