Плагин прикольный, однако падал все время, и вот почему. В своем коде ты сначала устанавливаешь значение ecx, потом вызываешь api функцию (SendMessage) расчитывая на то, что значение ecx она не поменяет и дальше продолжаешь манипуляции с ecx. Однако мы знаем, что любая api функция после ее вызова может поменять значение eax,ecx,edx - это железное правило, нужно это учесть при кодинге на асмме. По поводу бага, действительно значение ecx функция SendMessage не меняет(по крайней мере в XPSP2), но как только, какая-то программа устанавливает глобальный хук в системе SetWindowsHookEx (WH_CALLWNDPROCRET), то регистр ecx после вызова SendMessage начианет менятся, так как после вызова SendMessage отрабатывает установлення хуком функция CallWndRetProc, которая и поменяет значение ecx вызвав у себя в коде CallNextHookEx. Код (Text): 00D81342 50 PUSH EAX 00D81343 6A 00 PUSH 0 00D81345 68 34040000 PUSH 434 00D8134A FF75 10 PUSH DWORD PTR SS:[EBP+10] 00D8134D E8 EC060000 CALL <JMP.&user32.SendMessageA> 00D81352 8B55 DC MOV EDX,DWORD PTR SS:[EBP-24] 00D81355 8915 0832D800 MOV DWORD PTR DS:[D83208],EDX 00D8135B 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20] ;<<<<< Тут ты выставляешь ecx равный какой-то переменной 00D8135E 2BCA SUB ECX,EDX 00D81360 890D 9C31D800 MOV DWORD PTR DS:[D8319C],ECX 00D81366 81F9 80000000 CMP ECX,80 00D8136C 73 63 JNB SHORT HL_LIDA.00D813D1 00D8136E 68 1C31D800 PUSH HL_LIDA.00D8311C 00D81373 6A 00 PUSH 0 00D81375 68 3E040000 PUSH 43E 00D8137A FF75 10 PUSH DWORD PTR SS:[EBP+10] 00D8137D E8 BC060000 CALL <JMP.&user32.SendMessageA> ; <<<< вызывается SendMessageA (api функция меняет значение ecx, далее переполнение и excaption ) 00D81382 8D15 1C31D800 LEA EDX,DWORD PTR DS:[D8311C] 00D81388 33C0 XOR EAX,EAX 00D8138A EB 25 JMP SHORT HL_LIDA.00D813B1 00D8138C 8A4411 FF MOV AL,BYTE PTR DS:[ECX+EDX-1] 00D81390 3C 0A CMP AL,0A 00D81392 74 0C JE SHORT HL_LIDA.00D813A0 00D81394 3C 0D CMP AL,0D 00D81396 74 08 JE SHORT HL_LIDA.00D813A0 00D81398 3C 20 CMP AL,20 00D8139A 74 04 JE SHORT HL_LIDA.00D813A0 00D8139C 3C 09 CMP AL,9 00D8139E 75 0A JNZ SHORT HL_LIDA.00D813AA 00D813A0 C705 9C31D800 0>MOV DWORD PTR DS:[D8319C],0 00D813AA FEC8 DEC AL 00D813AC 24 E0 AND AL,0E0 00D813AE 0AE0 OR AH,AL 00D813B0 49 DEC ECX 00D813B1 0BC9 OR ECX,ECX 00D813B3 ^ 75 D7 JNZ SHORT HL_LIDA.00D8138C
Уважаемый S_Alex не моглибы вы поделится информацией о написании дополнений для RADASM.Я имею ввиду информацию о том, как само дополнение (DLL) взаимодействует с средой,какие правила нужно соблюдать при написании дополнения.
Я сам толком не знаю всего и посоветовать что-либо толковое не смогу. Смотри исходники и примеры... Код (Text): http://wasm.ru/forum/viewtopic.php?id=35205
Sashok Есть, чтобы её увидеть посмотри в зеркало. Насколько я понимаю, можно даже "эмулировать" синтаксис масма в фасме, благо, не шибко различаются. Либо написать скрипт какой-нибудь. Я делаю так, исправляю синтаксис в масм файле (сколько найду). Потому пробую скомпилировать, правлю ошибки которые показывает фасм. Если не работает - запускаю масмовский и фасм вариант параллельно с проблемного места и смотрю различия. Метод не идеален, если ошибиться где-нибудь с квадратной скобкой... будет бяка.