Тестируем Addin для IDE RadAsm.

Тема в разделе "WASM.SOFTWARE", создана пользователем S_Alex, 20 дек 2009.

  1. JohnFive

    JohnFive New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2009
    Сообщения:
    6
    Плагин прикольный, однако падал все время, и вот почему. В своем коде ты сначала устанавливаешь значение ecx, потом вызываешь api функцию (SendMessage) расчитывая на то, что значение ecx она не поменяет и дальше продолжаешь манипуляции с ecx. Однако мы знаем, что любая api функция после ее вызова может поменять значение eax,ecx,edx - это железное правило, нужно это учесть при кодинге на асмме. По поводу бага, действительно значение ecx функция SendMessage не меняет(по крайней мере в XPSP2), но как только, какая-то программа устанавливает глобальный хук в системе SetWindowsHookEx (WH_CALLWNDPROCRET), то регистр ecx после вызова SendMessage начианет менятся, так как после вызова SendMessage отрабатывает установлення хуком функция CallWndRetProc, которая и поменяет значение ecx вызвав у себя в коде CallNextHookEx.
    Код (Text):
    1. 00D81342    50              PUSH EAX
    2. 00D81343    6A 00           PUSH 0
    3. 00D81345    68 34040000     PUSH 434
    4. 00D8134A    FF75 10         PUSH DWORD PTR SS:[EBP+10]
    5. 00D8134D    E8 EC060000     CALL <JMP.&user32.SendMessageA>
    6. 00D81352    8B55 DC         MOV EDX,DWORD PTR SS:[EBP-24]
    7. 00D81355    8915 0832D800   MOV DWORD PTR DS:[D83208],EDX
    8. 00D8135B    8B4D E0         MOV ECX,DWORD PTR SS:[EBP-20]          ;<<<<< Тут ты выставляешь ecx равный какой-то переменной
    9. 00D8135E    2BCA            SUB ECX,EDX
    10. 00D81360    890D 9C31D800   MOV DWORD PTR DS:[D8319C],ECX
    11. 00D81366    81F9 80000000   CMP ECX,80
    12. 00D8136C    73 63           JNB SHORT HL_LIDA.00D813D1
    13. 00D8136E    68 1C31D800     PUSH HL_LIDA.00D8311C
    14. 00D81373    6A 00           PUSH 0
    15. 00D81375    68 3E040000     PUSH 43E
    16. 00D8137A    FF75 10         PUSH DWORD PTR SS:[EBP+10]
    17. 00D8137D    E8 BC060000     CALL <JMP.&user32.SendMessageA>     ; <<<< вызывается SendMessageA (api функция меняет значение ecx, далее переполнение и excaption )
    18. 00D81382    8D15 1C31D800   LEA EDX,DWORD PTR DS:[D8311C]
    19. 00D81388    33C0            XOR EAX,EAX
    20. 00D8138A    EB 25           JMP SHORT HL_LIDA.00D813B1
    21. 00D8138C    8A4411 FF       MOV AL,BYTE PTR DS:[ECX+EDX-1]
    22. 00D81390    3C 0A           CMP AL,0A
    23. 00D81392    74 0C           JE SHORT HL_LIDA.00D813A0
    24. 00D81394    3C 0D           CMP AL,0D
    25. 00D81396    74 08           JE SHORT HL_LIDA.00D813A0
    26. 00D81398    3C 20           CMP AL,20
    27. 00D8139A    74 04           JE SHORT HL_LIDA.00D813A0
    28. 00D8139C    3C 09           CMP AL,9
    29. 00D8139E    75 0A           JNZ SHORT HL_LIDA.00D813AA
    30. 00D813A0    C705 9C31D800 0>MOV DWORD PTR DS:[D8319C],0
    31. 00D813AA    FEC8            DEC AL
    32. 00D813AC    24 E0           AND AL,0E0
    33. 00D813AE    0AE0            OR AH,AL
    34. 00D813B0    49              DEC ECX
    35. 00D813B1    0BC9            OR ECX,ECX
    36. 00D813B3  ^ 75 D7           JNZ SHORT HL_LIDA.00D8138C
     
  2. JohnFive

    JohnFive New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2009
    Сообщения:
    6
    Пролистав вверх, понял, что этот баг уже всплывал и его уже пофиксили, автору большое спасибо.
     
  3. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    Уважаемый S_Alex не моглибы вы поделится информацией о
    написании дополнений для RADASM.Я имею ввиду информацию о том,
    как само дополнение (DLL) взаимодействует с средой,какие правила нужно
    соблюдать при написании дополнения.
     
  4. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Я сам толком не знаю всего и посоветовать что-либо толковое не смогу.
    Смотри исходники и примеры...
    Код (Text):
    1. http://wasm.ru/forum/viewtopic.php?id=35205
     
  5. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    А можете выложить INCLUD'ы для роботы с RadAsm ?
    Желательно FASM'овские.
     
  6. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Он изначально написан на MASMe.
     
  7. Sashok

    Sashok New Member

    Публикаций:
    0
    Регистрация:
    19 янв 2009
    Сообщения:
    52
    Понял.А утилит типа Masm2fasm в природе есть?
     
  8. Z3N

    Z3N New Member

    Публикаций:
    0
    Регистрация:
    10 фев 2009
    Сообщения:
    812
    Sashok
    Есть, чтобы её увидеть посмотри в зеркало.
    Насколько я понимаю, можно даже "эмулировать" синтаксис масма в фасме, благо, не шибко различаются. Либо написать скрипт какой-нибудь.

    Я делаю так, исправляю синтаксис в масм файле (сколько найду). Потому пробую скомпилировать, правлю ошибки которые показывает фасм. Если не работает - запускаю масмовский и фасм вариант параллельно с проблемного места и смотрю различия.
    Метод не идеален, если ошибиться где-нибудь с квадратной скобкой... будет бяка.