Добрый вечер! Нужна ваша помощь в реализации патча (желательно на высок. ур. языке), который бы находил определенную последовательность байт и заменял на другую. Поиском пользовался в течении нескольких дней, но нигде ничего кроме четкого оффсета SetFileOffset/fseek не нашел. Обрисую на реальном примере. Есть бинарник онлайн игры 5 мБ, найдены все необходимые переходы и вычислены байты, которые требуется заменить. Но бинарник "не постоянен" и апдейтиться с появлением каких-то изменений на сервере игры, поэтому та часть, которую необходимо заменить может смещаться. Есть похожий патч, но на более старую версию игры (написан он на Дельфях). Выковырял из нее цикл-сверку байтов Код (Text): 004F045C /$ 53 PUSH EBX 004F045D |. 56 PUSH ESI 004F045E |. 57 PUSH EDI 004F045F |. 8BF8 MOV EDI,EAX 004F0461 |. 83EF 64 SUB EDI,64 004F0464 |. 85FF TEST EDI,EDI 004F0466 |. 0F8C 22010000 JL patch.004F058E 004F046C |. 47 INC EDI 004F046D |. 33F6 XOR ESI,ESI 004F046F |. BB 44E04F00 MOV EBX,patch.004FE044 004F0474 |> 803B FF /CMP BYTE PTR DS:[EBX],0FF 004F0477 |. 75 5A |JNZ SHORT patch.004F04D3 004F0479 |. 807B 01 FF |CMP BYTE PTR DS:[EBX+1],0FF 004F047D |. 75 54 |JNZ SHORT patch.004F04D3 004F047F |. 807B 02 85 |CMP BYTE PTR DS:[EBX+2],85 004F0483 |. 75 4E |JNZ SHORT patch.004F04D3 004F0485 |. 807B 03 C0 |CMP BYTE PTR DS:[EBX+3],0C0 004F0489 |. 75 48 |JNZ SHORT patch.004F04D3 004F048B |. 807B 05 35 |CMP BYTE PTR DS:[EBX+5],35 004F048F |. 75 42 |JNZ SHORT patch.004F04D3 004F0491 |. 807B 06 6A |CMP BYTE PTR DS:[EBX+6],6A 004F0495 |. 75 3C |JNZ SHORT patch.004F04D3 004F0497 |. 807B 07 00 |CMP BYTE PTR DS:[EBX+7],0 004F049B |. 75 36 |JNZ SHORT patch.004F04D3 004F049D |. 807B 08 68 |CMP BYTE PTR DS:[EBX+8],68 004F04A1 |. 75 30 |JNZ SHORT patch.004F04D3 004F04A3 |. 807B 09 F6 |CMP BYTE PTR DS:[EBX+9],0F6 004F04A7 |. 75 2A |JNZ SHORT patch.004F04D3 004F04A9 |. 8935 34E04F00 |MOV DWORD PTR DS:[4FE034],ESI 004F04AF |. 0FB643 04 |MOVZX EAX,BYTE PTR DS:[EBX+4] 004F04B3 |. A2 40E04F00 |MOV BYTE PTR DS:[4FE040],AL 004F04B8 |. A1 20E04F00 |MOV EAX,DWORD PTR DS:[4FE020] 004F04BD |. 8B80 6C030000 |MOV EAX,DWORD PTR DS:[EAX+36C] 004F04C3 |. 8B80 70020000 |MOV EAX,DWORD PTR DS:[EAX+270] 004F04C9 |. BA 9C054F00 |MOV EDX,patch.004F059C ; ASCII "Pattern #1 found..." 004F04CE |. 8B08 |MOV ECX,DWORD PTR DS:[EAX] 004F04D0 |. FF51 38 |CALL DWORD PTR DS:[ECX+38] 004F04D3 |> 803B 00 |CMP BYTE PTR DS:[EBX],0 004F04D6 |. 75 5A |JNZ SHORT patch.004F0532 004F04D8 |. 807B 01 83 |CMP BYTE PTR DS:[EBX+1],83 004F04DC |. 75 54 |JNZ SHORT patch.004F0532 004F04DE |. 807B 02 BD |CMP BYTE PTR DS:[EBX+2],0BD 004F04E2 |. 75 4E |JNZ SHORT patch.004F0532 004F04E4 |. 807B 03 C8 |CMP BYTE PTR DS:[EBX+3],0C8 004F04E8 |. 75 48 |JNZ SHORT patch.004F0532 004F04EA |. 807B 04 FE |CMP BYTE PTR DS:[EBX+4],0FE 004F04EE |. 75 42 |JNZ SHORT patch.004F0532 004F04F0 |. 807B 05 FF |CMP BYTE PTR DS:[EBX+5],0FF 004F04F4 |. 75 3C |JNZ SHORT patch.004F0532 004F04F6 |. 807B 06 FF |CMP BYTE PTR DS:[EBX+6],0FF 004F04FA |. 75 36 |JNZ SHORT patch.004F0532 004F04FC |. 807B 07 01 |CMP BYTE PTR DS:[EBX+7],1 004F0500 |. 75 30 |JNZ SHORT patch.004F0532 004F0502 |. 807B 09 4A |CMP BYTE PTR DS:[EBX+9],4A 004F0506 |. 75 2A |JNZ SHORT patch.004F0532 004F0508 |. 8935 38E04F00 |MOV DWORD PTR DS:[4FE038],ESI 004F050E |. 0FB643 08 |MOVZX EAX,BYTE PTR DS:[EBX+8] 004F0512 |. A2 41E04F00 |MOV BYTE PTR DS:[4FE041],AL 004F0517 |. A1 20E04F00 |MOV EAX,DWORD PTR DS:[4FE020] 004F051C |. 8B80 6C030000 |MOV EAX,DWORD PTR DS:[EAX+36C] 004F0522 |. 8B80 70020000 |MOV EAX,DWORD PTR DS:[EAX+270] 004F0528 |. BA B8054F00 |MOV EDX,patch.004F05B8 ; ASCII "Pattern #2 found..." 004F052D |. 8B08 |MOV ECX,DWORD PTR DS:[EAX] 004F052F |. FF51 38 |CALL DWORD PTR DS:[ECX+38] 004F0532 |> 803B 00 |CMP BYTE PTR DS:[EBX],0 004F0535 |. 75 4E |JNZ SHORT patch.004F0585 004F0537 |. 807B 02 50 |CMP BYTE PTR DS:[EBX+2],50 004F053B |. 75 48 |JNZ SHORT patch.004F0585 004F053D |. 807B 03 68 |CMP BYTE PTR DS:[EBX+3],68 004F0541 |. 75 42 |JNZ SHORT patch.004F0585 004F0543 |. 807B 04 F8 |CMP BYTE PTR DS:[EBX+4],0F8 004F0547 |. 75 3C |JNZ SHORT patch.004F0585 004F0549 |. 807B 05 0B |CMP BYTE PTR DS:[EBX+5],0B 004F054D |. 75 36 |JNZ SHORT patch.004F0585 004F054F |. 807B 06 00 |CMP BYTE PTR DS:[EBX+6],0 004F0553 |. 75 30 |JNZ SHORT patch.004F0585 004F0555 |. 807B 07 00 |CMP BYTE PTR DS:[EBX+7],0 004F0559 |. 75 2A |JNZ SHORT patch.004F0585 004F055B |. 8935 3CE04F00 |MOV DWORD PTR DS:[4FE03C],ESI 004F0561 |. 0FB643 01 |MOVZX EAX,BYTE PTR DS:[EBX+1] 004F0565 |. A2 42E04F00 |MOV BYTE PTR DS:[4FE042],AL 004F056A |. A1 20E04F00 |MOV EAX,DWORD PTR DS:[4FE020] 004F056F |. 8B80 6C030000 |MOV EAX,DWORD PTR DS:[EAX+36C] 004F0575 |. 8B80 70020000 |MOV EAX,DWORD PTR DS:[EAX+270] 004F057B |. BA D4054F00 |MOV EDX,patch.004F05D4 ; ASCII "Pattern #3 found..." 004F0580 |. 8B08 |MOV ECX,DWORD PTR DS:[EAX] 004F0582 |. FF51 38 |CALL DWORD PTR DS:[ECX+38] 004F0585 |> 46 |INC ESI 004F0586 |. 43 |INC EBX 004F0587 |. 4F |DEC EDI 004F0588 |.^ 0F85 E6FEFFFF \JNZ patch.004F0474 004F058E |> 5F POP EDI 004F058F |. 5E POP ESI 004F0590 |. 5B POP EBX 004F0591 \. C3 RETN Ищутся три паттерна Код (Text): 0FF 0FF 85 0C0 35 [i](пропускает байт)[/i] 6A 0 68 0F6 Код (Text): 0 83 0BD 0C8 0FE 0FF 0FF 0FF 1 [i](пропускает байт)[/i] 4A Код (Text): 0 [i](пропускает байт)[/i] 50 68 0F8 0B 0 0 Итоговый вопрос - какими функциями С/С++/Делфи можно реализовать вещь выше или что-либо для выполнения задачи ? Заранее благодарен )
если нужен результат - то можешь собрать в виде либы сорс diablo2oo2, который используется в dUP Search & Replace Engine [masm sourcecode] - used s&r engine in dUP