Вопрос по отладке в OllyDbg (1.10 у меня) программ писанных под masm и fasm. Пример кода под masm Код (Text): .DATA str_ db '123456789',0 .CODE ;------------------------------------------------------------------------ sub_pr proc lpStr:DWORD LOCAL handl :DWORD LOCAL nStCon :DWORD;Количество выведенных символов. push STD_OUTPUT_HANDLE call GetStdHandle mov handl,EAX int 3 push 0 push nStCon push 10 push lpStr push handl call WriteConsole ret sub_pr endp ;------------------------------------------------------------------------ start proc push offset str_ call sub_pr invoke ExitProcess, 0 start endp end start Картинка останова в OllyDbg. По F8 продолжаем нормально работать, все в порядке. Пример кода под fasm тот же Код (Text): format PE console entry start include 'c:\fasmw\include\win32a.inc' section '.data' data readable writeable str_ db '123456789',0 section '.code' code readable executable start: push str_ call sub_pr push 0 call [ExitProcess] proc sub_pr ,lpStr locals nStCon dd 0;Количество выведенных символов. handl dd 0 endl push STD_OUTPUT_HANDLE call [GetStdHandle] mov [handl],EAX int 3 lea ebx, [lpStr] mov ebx,[ebx] push 0 lea ecx,[nStCon] push ecx push 10 push EBX push [handl] call [WriteConsole] ret endp section '.idata' import data readable ; Секция импорта library kernel32,'KERNEL32.DLL' include 'C:\fasmw\INCLUDE\APIA\kernel32.inc' Картинка останова по int 3 в OllyDbg. Останов на немоей инструкции. По F7, F8 не работает. Конечно можно после int 3 подобрать инструкцию такую чтобы нормально все отразилось. Я например в случае fasm после int 3 ставлю ssub eax, ... и все нормально отображается, но так же неудобно. Вопрос как настроить OllyDbg так чтобы по int 3 можно было нормально пошагово выполнять fasm-программу? Спасибо.
Ну если код кривой окажется, точнее если eip будет указывать в середину инструкции (как в данном случае он указывал в середину инструкции int3), то нужно указать верную позицию самому.
_sheva740 Вам же JCronuz сразу сказал, чтобы использовали int3, а не int 3. Fasm в отличие от masm поддерживает обе инструкции. Olly совсем не виновата в том, что не остановилась на int 3, т.к. у неё по умолчанию в настройках установлено игнорировать int 3 breaks (вкладка Exceptions). А в том, что eip указывает в середину инструкции виноват вообще обработчик исключений, который туда передал управление.
_sheva740 В общем, во-первых никаких "каждый раз". И никаких "верных позиций" самому в таких случая указывать не надо: просто используйте int3. Да... во избежание недопониманий... игнорировать int 3 breaks в настройках Olly означает игнорировать int 3, а не int3. Т.е. настройки Вам трогать не нужно.
_sheva740 Хотя... гоню, наверное. Может и нужно... сейчас снял эту птичку, потом поставил, int3 всё равно пропускается... вроде раньше Olly тормозила на int3 и с этой птичкой.
l_inc да да понял, я просто не сразу понял что int3 - это не опечатка а инструкция. Теперь работает! Спасибо.