Моё приветствие, Вам (с) Есть код: Код (Text): 00536F84 55 push ebp 00536F85 8BEC mov ebp, esp 00536F87 51 push ecx 00536F88 53 push ebx 00536F89 8945FC mov [ebp-$04], eax 00536F8C 8B45FC mov eax, [ebp-$04] 00536F8F 8B9014040000 mov edx, [eax+$0414] 00536F95 8B45FC mov eax, [ebp-$04] 00536F98 E80B1B0000 call 00538AA8 00536F9D 33DB xor ebx, ebx ;**** 00536F9F 8AD8 mov bl, al ;**** 00536FA1 85DB test ebx, ebx ;**** 00536FA3 7E4A jle 00536FEF ;**** 00536FA5 8B45FC mov eax, [ebp-$04] 00536FA8 8B9014040000 mov edx, [eax+$0414] 00536FAE 8B45FC mov eax, [ebp-$04] 00536FB1 8B80FC030000 mov eax, [eax+$03FC] 00536FB7 8B8068020000 mov eax, [eax+$0268] 00536FBD E8BEB4EFFF call 00432480 00536FC2 8B153CC74F00 mov edx, [$004FC73C] 00536FC8 E85FC7ECFF call 0040372C 00536FCD BA00FF0000 mov edx, $0000FF00 00536FD2 E8C593F6FF call 004A039C 00536FD7 8B45FC mov eax, [ebp-$04] 00536FDA 8B8014040000 mov eax, [eax+$0414] 00536FE0 03C0 add eax, eax 00536FE2 8B15803A5500 mov edx, [$00553A80] 00536FE8 8B12 mov edx, [edx] 00536FEA 881CC2 mov [edx+eax*8], bl 00536FED EB32 jmp 00537021 00536FEF 8B45FC mov eax, [ebp-$04] 00536FF2 8B9014040000 mov edx, [eax+$0414] 00536FF8 8B45FC mov eax, [ebp-$04] 00536FFB 8B80FC030000 mov eax, [eax+$03FC] 00537001 8B8068020000 mov eax, [eax+$0268] 00537007 E874B4EFFF call 00432480 0053700C 8B153CC74F00 mov edx, [$004FC73C] 00537012 E815C7ECFF call 0040372C 00537017 BAFF000000 mov edx, $000000FF 0053701C E87B93F6FF call 004A039C из него нужно сделать: Код (Text): 55 push ebp 8BEC mov ebp, esp 51 push ecx 53 push ebx 8945FC mov [ebp-$04], eax 8B45FC mov eax, [ebp-$04] 8B9014040000 mov edx, [eax+$0414] 8B45FC mov eax, [ebp-$04] E81F1B0000 call 00555F7C 33DB xor ebx, ebx 8AD8 mov bl, al 6891000000 push $00000091 E8BD2EEBFF call 00407328 6683F801 cmp ax, +$01 7505 jnz 00554476 BB01000000 mov ebx, $00000001 85DB test ebx, ebx 7E4A jle 005544C4 8B45FC mov eax, [ebp-$04] 8B9014040000 mov edx, [eax+$0414] 8B45FC mov eax, [ebp-$04] 8B80FC030000 mov eax, [eax+$03FC] 8B8068020000 mov eax, [eax+$0268] E8CDE2EDFF call 00432764 8B15D44F5000 mov edx, [$00504FD4] E892F2EAFF call 00403734 BA00FF0000 mov edx, $0000FF00 E89408F5FF call 004A4D40 8B45FC mov eax, [ebp-$04] 8B8014040000 mov eax, [eax+$0414] 03C0 add eax, eax 8B15004D5700 mov edx, [$00574D00] 8B12 mov edx, [edx] 881CC2 mov [edx+eax*8], bl EB32 jmp 005544F6 8B45FC mov eax, [ebp-$04] 8B9014040000 mov edx, [eax+$0414] 8B45FC mov eax, [ebp-$04] 8B80FC030000 mov eax, [eax+$03FC] 8B8068020000 mov eax, [eax+$0268] E883E2EDFF call 00432764 8B15D44F5000 mov edx, [$00504FD4] E848F2EAFF call 00403734 BAFF000000 mov edx, $000000FF E84A08F5FF call 004A4D40 но в исходном фрагменте для Код (Text): 6891000000 push $00000091 E8BD2EEBFF call 00407328 6683F801 cmp ax, +$01 7505 jnz 00554476 BB01000000 mov ebx, $00000001 нет места, поэтому я сделал так: Код (Text): 00536F9D E9 FE730100 JMP copy_tes.0054E3A0 00536FA2 90 NOP 00536FA3 90 NOP 00536FA4 90 NOP ---- Код (Text): 0054E3A0 33DB XOR EBX,EBX 0054E3A2 8AC3 MOV AL,BL 0054E3A4 90 NOP 0054E3A5 68 91000000 PUSH 91 0054E3AA E8 698FEBFF CALL <JMP.&user32.GetKeyState> 0054E3AF 66:83F8 01 CMP AX,1 0054E3B3 ^0F85 EC8BFEFF JNZ copy_tes.00536FA5 0054E3B9 BB 01000000 MOV EBX,1 0054E3BE 85DB TEST EBX,EBX 0054E3C0 ^0F8E 298CFEFF JLE copy_tes.00536FEF 0054E3C6 90 NOP Подскажите что не так, пожалуйста,...ибо мой кусочек кода должен работать только при СкруллЛокк=Истина, а именно команда 0054E3B9 BB 01000000 MOV EBX,1, а она всегда выполняется зы\ сильно не ругайтесь, ибо несведущь, но пытлив
замена Код (Text): 0054E3AF 66:83F8 01 CMP AX,1 на Код (Text): 0054E3AF 66:83F8 01 CMP AL,1 исправляет ситуацию, но возврящает меня опять к проблеме того, что в модифицированном коде Код (Text): 0054E3C0 ^0F8E 298CFEFF JLE copy_tes.00536FEF 0054E3C6 90 NOP 0054E3C7 E92D8DFEFF JMP 00536FA5 ВСЕГДА осуществляется переход на 00536FEF, ибо в регистре EBX - 0, всегда...
У меня есть подозрение, что добавление АСМ кода в уже существующее приложение моим методом не есть хорошо. так ли это? может есть более адекватный вариант? и еще,...я пробовал вынести всю процедуру Код (Text): 00536F84 55 push ebp по адресу 0054E24E, изменил все переходы на нее и вызовы, но приложение вылетает с Access Violation... пока не знаю почему
всем благодарность великая. ниже следующее работает: Код (Text): 0054E24E 55 PUSH EBP 0054E24F 8BEC MOV EBP,ESP 0054E251 51 PUSH ECX 0054E252 53 PUSH EBX 0054E253 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 0054E256 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0054E259 8B90 14040000 MOV EDX,DWORD PTR DS:[EAX+414] 0054E25F 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4] 0054E262 E8 41A8FEFF CALL copy_tes.00538AA8 0054E267 33DB XOR EBX,EBX 0054E269 8AD8 MOV BL,AL 0054E26B 90 NOP 0054E26C 68 91000000 PUSH 91 0054E271 E8 A290EBFF CALL <JMP.&user32.GetKeyState> 0054E276 3C 01 CMP AL,1 0054E278 75 06 JNZ SHORT copy_tes.0054E280 0054E27A BB 01000000 MOV EBX,1 0054E27F 90 NOP 0054E280 85DB TEST EBX,EBX 0054E282 ^0F8E 678DFEFF JLE copy_tes.00536FEF 0054E288 ^E9 188DFEFF JMP copy_tes.00536FA5 0054E28D 90 NOP Код (Text): 00536F84 E9 C5720100 JMP copy_tes.0054E24E 00536F89 90 NOP ... 00536F9F 90 NOP 00536FA0 E9 A9720100 JMP copy_tes.0054E24E