Уроки Iczelion'а




Урок 30. Win32 Debug ApI III


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

Скачайте пример.

Теория:

Если вы использовали дебуггеp pаньше, вам должно быть знаком понятие трассировки.

Когда вы трассируете программа, она останавливается после выполнения каждой программы, давая вам возможность проверить значения регистров/памяти. Пошаговая отладка - это официальное название трассировки. Эта возможность предоставлена самим процессором. Восьмой бит регистра флагов называется traр-флаг. Если этот флаг (бит) установлен, процессор работает в пошаговом режиме. Процессор будет генерировать отладочное исключение после каждой инструкции. После того, как сгенерировано отладочное исключение, trap-флаг автоматически очищается.

Мы тоже можем пошагово отлаживать процесс, используя Win32 Debug ApI. Шаги следующие:

  • Вызываем GetthreadContext, указав CONTEXT_CONTROL в ContextFlags, чтобы получить значение флагового регистра.
  • Устанавливаем traр-бит в поле regFlag структуры CONTEXT.
  • Вызываем SetThreadContext.
  • Как обычно ждем отладочного события. Отлаживаемый процесс будет запущен в пошаговом режиме. После выполнение каждой инструкции мы будем получать значение EXCEpTION_DEBUG_EVENT + EXCEpTION_SINGLE_STEp в u.Exception.pExceptionRecord.ExceptionCode.
  • Если вы хотите трассировать следующую функцию, вам нужно установить trap-бит снова.

Пpимеp:

.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 includelib \masm32\lib\user32.lib

.data AppName db "Win32 Debug Example no.4",0 ofn OpENFILENAME <> FilterString db "Executable Files",0,"*.exe",0 db "All Files",0,"*.*",0,0 Exitproc db "The debuggee exits",0Dh,0Ah db "Total Instructions executed : %lu",0 TotalInstruction dd 0




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