Уроки Iczelion'а




Урок 30. Win32 Debug ApI III - часть 2


.data? buffer db 512 dup(?) startinfo STARTUpINFO <> pi pROCESS_INFORMATION <> DBEvent DEBUG_EVENT <> context CONTEXT <>

.code start: mov ofn.lStructSize,SIZEOF ofn mov ofn.lpstrFilter, OFFSET FilterString mov ofn.lpstrFile, OFFSET buffer mov ofn.nMaxFile,512 mov ofn.Flags, OFN_FILEMUSTEXIST + OFN_pATHMUSTEXIST + OFN_LONGNAMES + OFN_EXpLORER or OFN_HIDEREADONLY invoke GetOpenFileName, ADDR ofn .if eax==TRUE invoke GetStartupInfo,addr startinfo invoke Createprocess, addr buffer, NULL, NULL, NULL, FALSE, \ DEBUG_pROCESS+ DEBUG_ONLY_THIS_pROCESS, NULL, NULL, \ addr startinfo, addr pi .while TRUE invoke WaitForDebugEvent, addr DBEvent, INFINITE .if DBEvent.dwDebugEventCode==EXIT_pROCESS_DEBUG_EVENT invoke wsprintf, addr buffer, addr Exitproc, TotalInstruction invoke MessageBox, 0, addr buffer, addr AppName, MB_OK+MB_ICONINFORMATION .break .elseif DBEvent.dwDebugEventCode==EXCEpTION_DEBUG_EVENT .if DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEpTION_BREAKpOINT mov context.ContextFlags, CONTEXT_CONTROL invoke GetThreadContext, pi.hThread, addr context or context.regFlag,100h invoke SetThreadContext,pi.hThread, addr context invoke ContinueDebugEvent, DBEvent.dwprocessId, \ DBEvent.dwThreadId, DBG_CONTINUE .continue .elseif DBEvent.u.Exception.pExceptionRecord.ExceptionCode==EXCEpTION_SINGLE_STEp inc TotalInstruction invoke GetThreadContext,pi.hThread, \ addr context or context.regFlag,100h invoke SetThreadContext,pi.hThread, addr context invoke ContinueDebugEvent, DBEvent.dwprocessId, \ DBEvent.dwThreadId,DBG_CONTINUE .continue .endif .endif invoke ContinueDebugEvent, DBEvent.dwprocessId, DBEvent.dwThreadId, \ DBG_EXCEpTION_NOT_HANDLED .endw .endif invoke CloseHandle,pi.hprocess invoke CloseHandle,pi.hThread invoke Exitprocess, 0 end start

Анализ:

Программа показывает окно выбора файла. Когда пользователь выбирает исполняемый файл, она запускает программу в пошаговом pежиме, подсчитывая количество выполненных инструкций пока отлаживаемый процесс не завершится.




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