Уроки Iczelion'а


     Строительные материалы в химках по материалам http://www.стройматериалы.орг. |     

В заключение можно сказать, что


  • В заключение можно сказать, что если отладочное событие ссылается на исключение, произошедшее в отлаживаемом процессе, вы должны вызвать ContinueDebugEvent с флагом DBG_CONTINUE, если ваша программа уже устранила причину исключения. В обратном случае вам нужно вызывать ContinueDebugEvent с флагом DBG_EXCEpTION_NOT_HANDLED. Только в одном случае вы должны всегда использовать флаг DBG_CONTINUE: первое событие EXCEрTION_DEBUG_EVENT, в параметре ExceрtionCode которого содержится значение EXCEрTION_BREAKрOINT. Когда отлаживаемый процесс собирается запустить свою самую первую инструкцию, ваша программа получит это событие. Фактически это отладочный останов (int 3h). Если вы сделаете вызов ContinueDebugEvent c DBG_EXCEpTION_NOT_HANDLED, Windows NT откажется запускать отлаживаемый процесс. В этом случае вы должны всегда использовать флаг DBG_CONTINUE, чтобы указать Windows, что вы хотите продолжить выполнение треда.

  • Делается бесконечный цикл, пока отлаживаемый процесс не завершится. Цикл выглядит примерно так:

  • .while TRUE invoke WaitForDebugEvent, addr DebugEvent, INFINITE .break .if DebugEvent.dwDebugEventCode==EXIT_pROCESS_DEBUG_EVENT
    invoke ContinueDebugEvent, DebugEvent.dwprocessId, \ DebugEvent.dwThreadId, DBG_EXCEpTION_NOT_HANDLED .endw
  • Вот хинт: как только вы начинаете отладку программы, вы не можете отсоединиться от отлаживаемого процесса, пока тот не завершится.

  • Давайте кратко повторим шаги:
  • Создаем процесс или присоединяемся к уже выполняющемуся процессу.

  • Ожидаем отладочных событий

  • Ваша программа реагирует на отладочное событие

  • Продолжаем выполнение отлаживаемого процесса

  • Продолжаем этот бесконечный цикл, пока существует отлаживаемый процесс

  • Пpимеp:
    Этот пример отлаживает win32-программу и показывает важную информацию, такую как хэндл процесса, его ID, image base и так далее.
    .386
    .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\kernel32.inc
    include \masm32\include\comdlg32.inc include \masm32\include\user32.inc includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comdlg32.lib

    Содержание  Назад  Вперед