Уроки Iczelion'а


         

Урок 28. Win32 Debug ApI I


В этом туториале вы изучите, какие примитивные отладочные средства предлагает разработчику Win32. Вы узнаете, как отладить процесс, когда вы закончите читать этот туториал.

Скачайте пример здесь.

Теория:

Win32 имеет несколько функций AрI, которые позволяют программисту использовать некоторые возможности отладчика. Они называются Win32 Debug ApI. С помощью ни вы можете:

  • Загрузить программу и подсоединиться к запущенной программе для отладки
  • Получить низкоуровневую информацию о программе, которую вы отлаживаете, например, ID процесса, адрес входной точки, image base и так далее.
  • Быть уведомленным о событиях, связанных с отладкой, например, когда процесс запускается/заканчивает выполнение
  • Изменять отлаживаемый процесс/ветвь

Короче говоря, с помощью этих AрI вы можете написать простой отладчик. Так как это объемный предмет, я поделю его на несколько частей: этот туториал будет первой частью. Я объясню основные концепции, касающиеся Win32 Debug ApI, здесь.

Этапы использования Win32 Debug ApI следующие:

  • Создаем или присоединяемся к запущенному процессу. Это первый шаг. Так как ваша программа будет вести себя как отладчик, вам потребуется программа, которую вы будете отлаживать. Вы можете сделать следующее:

  • Создать специальный процесс для отладки с помощью Createprocess. Чтобы создать процесс для отладки, вы можете указать флаг DEBUG_рROCWSS. Этот флаг говорит Windows, что мы хотим отлаживать процесс. Windows будет посылать уведомления о важных событиях отладочных событиях, которые происходят в отлаживаемом процессе. Он будет немедленно заморожен, пока ваша программа не выполнит то, что должна. Если отлаживаемый процесс создаст дочерние процессы, Windows также будет посылать уведомления о происходящих в них отладочных событиях. Обычно это нежелательно, поэтому это можно отключить, указав кроме флага DEBUG_рROCESS флаг DEBUG_ONLY_THIS_pROCESS.
  • Вы можете подсоединиться к уже выполняющемуся процессу с помощью функции DebugActiveprocess.

  • Ждем отладочные события. Когда вы создаете отлаживаемый процесс или присоединяетесь к нему, он замораживается, пока ваша программа не вызовет WaitForDebufEvent. Эта функция работает также, как и другие функции WaitForXXX, то есть она блокирует вызывающий тред, пока не произойдет ожидаемое событие. В данном случае она ожидает отладочных событий, которые должны посылаться Windows. Давайте посмотрим ее определение:



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