Вопрос по отладке в OllyDbg fasm-программ.

Тема в разделе "WASM.BEGINNERS", создана пользователем _sheva740, 10 сен 2009.

  1. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Вопрос по отладке в OllyDbg (1.10 у меня) программ писанных под masm и fasm.
    Пример кода под masm
    Код (Text):
    1. .DATA
    2.  
    3.     str_    db '123456789',0
    4. .CODE
    5. ;------------------------------------------------------------------------
    6. sub_pr proc lpStr:DWORD
    7. LOCAL handl :DWORD
    8. LOCAL nStCon    :DWORD;Количество выведенных символов.
    9.  
    10.     push    STD_OUTPUT_HANDLE
    11.     call    GetStdHandle
    12.     mov handl,EAX
    13. int 3
    14.     push    0
    15.     push    nStCon
    16.     push    10
    17.     push    lpStr
    18.     push    handl
    19.     call    WriteConsole
    20.    
    21.  
    22.     ret
    23. sub_pr endp
    24. ;------------------------------------------------------------------------
    25.  
    26. start proc
    27.     push    offset str_
    28.     call    sub_pr 
    29.     invoke  ExitProcess, 0
    30. start endp
    31. end start
    Картинка останова в OllyDbg. По F8 продолжаем нормально работать, все в порядке.
    [​IMG]

    Пример кода под fasm тот же

    Код (Text):
    1. format PE console
    2. entry start
    3. include 'c:\fasmw\include\win32a.inc'
    4.  
    5. section '.data' data readable writeable
    6.     str_    db '123456789',0
    7. section '.code' code readable executable
    8. start:
    9.     push    str_   
    10.     call    sub_pr
    11.     push    0
    12.     call    [ExitProcess]
    13.  
    14. proc sub_pr ,lpStr
    15. locals
    16.     nStCon  dd 0;Количество выведенных символов.
    17.     handl   dd 0
    18. endl
    19.     push    STD_OUTPUT_HANDLE
    20.     call    [GetStdHandle]
    21.     mov [handl],EAX
    22. int 3
    23.     lea ebx, [lpStr]
    24.     mov ebx,[ebx]
    25.         push    0
    26.     lea ecx,[nStCon]
    27.     push    ecx
    28.     push    10
    29.     push    EBX
    30.     push    [handl]
    31.     call    [WriteConsole]
    32.     ret
    33. endp
    34. section '.idata' import data readable       ; Секция импорта
    35.   library kernel32,'KERNEL32.DLL'
    36.  
    37.   include 'C:\fasmw\INCLUDE\APIA\kernel32.inc'
    Картинка останова по int 3 в OllyDbg. Останов на немоей инструкции. По F7, F8 не работает.

    [​IMG]

    Конечно можно после int 3 подобрать инструкцию такую чтобы нормально все отразилось.
    Я например в случае fasm после int 3 ставлю ssub eax, ... и все нормально отображается, но
    так же неудобно.
    Вопрос как настроить OllyDbg так чтобы по int 3 можно было нормально пошагово выполнять fasm-программу?
    Спасибо.
     
  2. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    В масм опкод int 3 = 0xCC

    фасм ассемблирует int 3 = 0xCD03

    Странно.
     
  3. JCronuz

    JCronuz New Member

    Публикаций:
    0
    Регистрация:
    26 сен 2007
    Сообщения:
    1.240
    Адрес:
    Russia
    а int3 как 0xCC
     
  4. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Оля просто криво опознала инструкции, прокрути код выше.
     
  5. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Flint_ta
    Если прокрутить то отразится нормальный код. Но F7 F8 не работает все равно.
     
  6. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    кликни правой на int 3 - New Origin Here
     
  7. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Flint_ta
    Помогло, так теперь постоянно так делать?
     
  8. Flint_ta

    Flint_ta New Member

    Публикаций:
    0
    Регистрация:
    25 май 2008
    Сообщения:
    312
    Ну если код кривой окажется, точнее если eip будет указывать в середину инструкции (как в данном случае он указывал в середину инструкции int3), то нужно указать верную позицию самому.
     
  9. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    Flint_ta
    ... а как его указать, не подскажешь?
     
  10. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    _sheva740
    Вам же JCronuz сразу сказал, чтобы использовали int3, а не int 3. Fasm в отличие от masm поддерживает обе инструкции.
    Olly совсем не виновата в том, что не остановилась на int 3, т.к. у неё по умолчанию в настройках установлено игнорировать int 3 breaks (вкладка Exceptions). А в том, что eip указывает в середину инструкции виноват вообще обработчик исключений, который туда передал управление.
     
  11. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    _sheva740
    В общем, во-первых никаких "каждый раз". И никаких "верных позиций" самому в таких случая указывать не надо: просто используйте int3.
    Да... во избежание недопониманий... игнорировать int 3 breaks в настройках Olly означает игнорировать int 3, а не int3. Т.е. настройки Вам трогать не нужно.
     
  12. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    _sheva740
    Хотя... гоню, наверное. :) Может и нужно... сейчас снял эту птичку, потом поставил, int3 всё равно пропускается... вроде раньше Olly тормозила на int3 и с этой птичкой.
     
  13. _sheva740

    _sheva740 New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    1.539
    Адрес:
    Poland
    l_inc
    да да понял, я просто не сразу понял что int3 - это не опечатка а инструкция. Теперь работает!
    Спасибо.