Уроки Iczelion'а




Урок 28. Win32 Debug ApI I - часть 8


.elseif DBEvent.dwDebugEventCode==EXCEpTION_DEBUG_EVENT .if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEpTION_BREAKpOINT invoke ContinueDebugEvent, DBEvent.dwprocessId, DBEvent.dwThreadId, DBG_CONTINUE .continue .endif

Если значение dwDebugEventCode pавно EXCEpTION_DEBUG_EVENT, мы также должны определить точный тип исключения из параметра ExceptionCode. Если значение в ExceptionCode pавно EXCEpTION_BREAKpOINT, и это случилось в первый раз, мы можем считать, что это исключение возникло при запуске отлаживаемым процессом своей первой инструкции. После обработки сообщения мы должны вызвать ContinueDebugEvent с флагом DBG_CONTINUE, чтобы позволить отлаживаемому процессу продолжать выполнение. Затем мы снова ждем следующего отлаживаемого события.

.elseif DBEvent.dwDebugEventCode==CREATE_THREAD_DEBUG_EVENT invoke MessageBox,0, addr NewThread, addr AppName, MB_OK+MB_ICONINFORMATION .elseif DBEvent.dwDebugEventCode==EXIT_THREAD_DEBUG_EVENT invoke MessageBox,0, addr EndThread, addr AppName, MB_OK+MB_ICONINFORMATION .endif

Если значение в dwDebugEventCode pавно CREATE_THREAD_DEBUG_EVENT или EXIT_THREAD_DEBUG_EVENT, мы отображаем соответствующий message box.

invoke ContinueDebugEvent, DBEvent.dwprocessId, DBEvent.dwThreadId, DBG_EXCEpTION_NOT_HANDLED .endw

Исключая вышеописанный случай с EXCEpTION_DEBUG_EVENT, мы вызываем ContinueDebugEvent с флагом DBG_EXCEpTION_NOT_HANDLED.

invoke CloseHandle,pi.hprocess invoke CloseHandle,pi.hThread

Когда отлаживаемый процесс завершает выполнение, мы выходим из цикла отладки и должны закрыть хэндлы отлаживаемого процесса и треда. Закрытие хэндлов не означает, что мы их прерываем. Это только значит, что мы больше не хотим использовать эти хэндлы для ссылки на соответствующий процесс/тред.

[C] Iczelion, пер. Aquila.






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