вот собственно - это вставка в дельфях... MEMSZ - размер памяти MEMPTR - указатель cmp ecx,0h - проверка на конец буфера... ищу вхождение 3-ёх байт $DB $87 $DB в конце будет адресс в c1... вот как можно оптимизировать это всё =\ а то мои скромные познания в асме не позволяют больше ничё сделать... Код (Text): asm pushad mov ecx,MEMSZ mov eax,MEMPTR @start: cmp byte [eax],$DB je @next inc eax loop @start jmp @end @next: inc eax dec ecx cmp ecx,0h je @end cmp byte [eax],$87 jne @start inc eax dec ecx cmp ecx,0h je @end cmp byte [eax],$DB jne @start mov c1,eax @end: popad end;
pushad mov ecx,MEMSZ mov eax,MEMPTR @start: cmp byte ptr [eax],0DBh je @next1 @next: inc eax loop @start jmp @end @next1: cmp word ptr [eax+1],0db87h jne @next mov c1,eax @end: popad
спасибо за ответ =) вот пришлось чуть модифицировать код... для поиска определённых сигнатур... ногами плиз сильно не пинать.... что тут можно оптимизировать для повышения скорости??? Код (Text): asm pushad lea eax,@sign1 lea edx,@end sub edx,eax <-- получаем размер сигнатуры mov signsz,edx mov ecx,MEMSZ <-- размер буфера mov eax,MEMPTR <-- указатель на буфер jmp @start @st: mov ecx,_ecx <-- восстанавиваем зн-я счётчика mov eax,_eax <-- и указателя inc eax @start: cmp eax,maxadd <-- данные закончились?? jae @end cmp byte [eax],$DB <-- первый байт je @next inc eax loop @start jmp @end @next: mov _ecx,ecx <-- сохранили зн-я счётчика mov _eax,eax <-- и указателя inc eax cmp byte [eax],$87 <-- второй байт jne @st dec eax mov count,0 mov ebx,0 mov ecx,signsz <-- размер сиг-ры lea edx,@sign1 <-- указатель на сиг-ру @find: cmp byte [edx],$FF <-- пропускаем если FF je @nextb mov bh,[edx] mov bl,[eax] cmp bh,bl <-- собственно сравниваем jne @nextb inc count <-- увеличиваем счётчик @nextb: inc eax inc edx loop @find cmp count,8 <-- совпало хотя бы 8 байт? jae @end jmp @st @sign1: DB $DB,$87,$33,$44,$55,$66,$77,$FF,$11,$22 @end: mov c1,eax <-- сохраняем указатель popad end;