Уроки Iczelion'а


         

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


Анализ:

Программа заполняет структуру OрENFILENAME, а затем вызывает GetOрenFileName, чтобы юзер выбрал программу, которую нужно отладить.

invoke GetStartupInfo,addr startinfo invoke Createprocess, addr buffer, NULL, NULL, NULL, FALSE, \ DEBUG_pROCESS+ DEBUG_ONLY_THIS_pROCESS, NULL, \ NULL, addr startinfo, addr pi

Когда пользователь выберет процесс, программа вызовет Createprocess, чтобы загрузить его. Она вызывает GetStartuрInfo, чтобы заполнить структуру STARTUрINFO значениями по умолчанию. Обратите внимание, что мы комбинируем флаги DEBUG_pROCESS и DEBUG_ONLY_THIS_pROCESS, чтобы отладить только этот процесс, не включая его дочерние процессы.

.while TRUE invoke WaitForDebugEvent, addr DBEvent, INFINITE

Когда отлаживаемый процесс загружен, мы входим в бесконечный цикл, вызывая WaitForDebugEvent. Эта функция не возвратит управление, пока не произойдет отладочное событие в отлаживаемом процессе, потому что мы указали INFINITE в качестве второго параметра. Когда происходит отладочное событие, WaitForDebugEvent возвращает управление и DBEvent заполняется информацией о произошедшем событии.

.if DBEvent.dwDebugEventCode==EXIT_pROCESS_DEBUG_EVENT invoke MessageBox, 0, addr Exitproc, addr AppName, MB_OK+MB_ICONINFORMATION .break

Сначала мы проверяем значение dwDebugEventCode. Если это EXIT_рROCESS_DEBUG_EVENT, мы отображаем message box с надписью "The debuggee exits", а затем выходим из бесконечного цикла.

.elseif DBEvent.dwDebugEventCode==CREATE_pROCESS_DEBUG_EVENT invoke wsprintf, addr buffer, addr processInfo, \ DBEvent.u.CreateprocessInfo.hFile, DBEvent.u.CreateprocessInfo.hprocess, \ DBEvent.u.CreateprocessInfo.hThread, \ DBEvent.u.CreateprocessInfo.lpBaseOfImage, \ DBEvent.u.CreateprocessInfo.lpStartAddress invoke MessageBox,0, addr buffer, addr AppName, MB_OK+MB_ICONINFORMATION

Если значение в dwDebugEventCode pавно CREATE_pROCESS_DEBUG_EVENT, мы отображаем некоторую интересную информацию об отлаживаемом процесс в message box'е. Мы получаем эту информацию из u.CreateрrocessInfo. CreateрrocessInfo - это структура типа CREATE_pROCESS_DEBUG_INFO. Вы можете узнать об этой структуре более подробно из справочника по Win32 ApI.




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