Перейти к содержанию

создание фильтра отсева и сравнение больших значений


Alex2411

Рекомендуемые сообщения

делаю  фильтр на отсев . запутался  как сделать  сравнение . помогите пожалуйста

 

нужно  сравнить длинную последовательность  байт  начиная от адреса [eax+04]  с последовательность которую я задаю сам . последоватеьность  может быть разной  длины  от 1  до  32 байт . как правильно  это сделать ? что бы сравнить все 32 байт я разбивал  на части и пробовал сравнивать  отдельные числа cmp [eax+04] потом c [eax+08] и дальше . получаеться сложно и не удобно , но наверно есть нормальный способ . в гугле я искал про сравнение строк , но не понял  как правильно  сделать в чит енжин .

 

самое главное . мне нужно  сравнивать последовательность ровно  столко байт сколько я задаю , а не  все 32 байт  каждый раз.  как  это сделать объясните пожалуйст .

Ссылка на комментарий
Поделиться на другие сайты

3 часа назад, partoftheworlD сказал:

2 массива с одним индексом в цикле. 

 

 

попробовал
чит енжин  ругаеться на

mov al, [ecx+04+di]
mov bl, [input_array+di]

не хочет  сохранять скрипт .если  заменить di  на edi  то не ругаеться , но при активации  скрипта  игра  на несколько секунда замирает , а потом или крашиться  или  останавливаеться системой . система пишет остановила  выполнение данных что бы не повредить компьютер.
регистры  сохранял  pushad и popad , а вместо  cmp edi, [len] пока поставил cmp edi,8
как сравниваеться  я вроде понял , но почему  не работает ? что я не так  сделал ?

Ссылка на комментарий
Поделиться на другие сайты

нашел причину  крашей . проблема была в игре. крашилась  когда в регистре были  данные, а скрипт  считал их как адрес . поставил  фильтры перед скриптом отсеял только адреса . теперь скрипт работает  нормально .
спасибо  за помощь.  не знаю когда разрешат плюсы  ставить

 


теперь  новая проблема появилась. не знаю как решить
создал метку input_array . вывел в таблицу .  выбрал тип данных array of bytes . если  ввести последовательность
11 11 11 11 11 11 11 11 11 11
 а потом новую последовательноть
22 22 22 22
 то  в памяти получаеться
22 22 22 22 11 11 11 11 11 11
а не
22 22 22 22 00 00 00 00 00 00
тогда скрипт перестает правильно  работать . как сделать когда  я записываю  из таблицы новую последовательность  то что бы старая  заполнялась вся нулями ?  помогите пожалуйста

Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, Alex2411 сказал:

не кто не  знает как  это сделать ?

 

В 23.01.2019 в 20:16, partoftheworlD сказал:

cmp edi, [len]

je exit

задай len

label(len)
registersymbol(len)


len:
  dd 0
 
 
 
unregistersymbol(len)  
  

и тоже выведи в таблицу и там уже задавай длину массива

Цикл будет заканчивать кода edi станет равным [len]

Соответственно, если задашь [len] равным 4 в твоем примере

22 22 22 22 11 11 11 11 11 11   // 11 11 11 - не будут учитываться.

 

Ссылка на комментарий
Поделиться на другие сайты

51 минуту назад, Garik66 сказал:

задай len

 

спасибо это я  знаю , но это не то .  каждый раз считать и  задавать длину не  удобно
я  хотел сделать что бы длина  ставилась автоматом . вписал последовательнось 10 байт сосчитала  только 10 , а если 20 то 20 . наверно ест такая  команда в ассемлере ,  но я не  знаю ее .
 по этому я  сделал по другому . добавил в по байтовом сравнении  каждый байт из метки

[input_array+di] 

сравнение с нулем , а сравнение cmp edi, [len] вобще убрал. получаеться когда

byte ptr [input_array+di] 

равно нулю то значит  конец цикла . это  отлично работает с текстом , но не получаеться  с простой последовательностью байт  там нет в конце нуля и сразу  начинаются старые байты . может как то заполнять нулями кусок памяти , а потом  задавать последовательность ?

 

гарик объясни пожалуйста заодно  как  коротко задать длинную  последовательность одинаковых байт . например нулей  что бы  записатть 32 байта нулями . искал в гугле нашел про дублирование dup , но в скрипт чит енжин  применить не получилось

Ссылка на комментарий
Поделиться на другие сайты

17 минут назад, Alex2411 сказал:

как  коротко задать длинную  последовательность одинаковых байт

не не знаю

17 минут назад, Alex2411 сказал:

может как то заполнять нулями кусок памяти , а потом  задавать последовательность ?

тож не знаю
у тебя эксклюзив

так что наверное придется курить малуал СЕ main LUA  

image.png

ну или гуглить по ассемблеру, если не хочешь от СЕ отходить.

 

17 минут назад, Alex2411 сказал:

может как то заполнять нулями кусок памяти , а потом  задавать последовательность ?

Хотя, как вариант - можно задать ещё один массив [input_array_Zero] 

nput_array_Zero:

  db 00 00 00 00 // заполнить его сразу нулями сколько там тебе нужно - 32 пары?

И потом сделать цикл такой же как и первый.

Циклы разделать flagom

 

Должно получиться.

  • Плюс 1
Ссылка на комментарий
Поделиться на другие сайты

19 минут назад, Garik66 сказал:

не знаю

 

жаль . ладно придумаю что то . все равно  спасибо тебе большое  что стараешься помогать
странно сделан форум. жалобу на пост  послать могу , а плюсик поставить нет . типа рано еще . лучше  бы наоборот

 

19 минут назад, Garik66 сказал:

у тебя эксклюзив

 

да не вроде .  это  мне для многих  игр нужно . полезная  штука . с текстом у  меня уже получилось  как хотел. осталось  найти решение  для любой последовательности байт .

 

9 минут назад, Garik66 сказал:

можешь посмотреть как быстро копирнуть

 

ага видел эту тему . то же попробую

 

фигасе . стигмаера забанили .  только сейчас заметил

Ссылка на комментарий
Поделиться на другие сайты

Только что, Alex2411 сказал:

как хотел. осталось  найти решение  для любой последовательности байт

Пиши свой алгоритм, который бы считал введеную тобой строку. Можно даже на основе того кода, что я кинул. Получить длинну можно с помощью вызова winapi функции типа strlen, результат будет в eax лежать.

Ссылка на комментарий
Поделиться на другие сайты

1 час назад, Alex2411 сказал:

ага видел эту тему

у меня ощущение, что пропустил кое-что в моем посте.
проблема в движке форума, он объединяет. некоторое время посты одного и тоже пользователя.

думаю что пропустил вот это:

2 часа назад, Garik66 сказал:

Хотя, как вариант - можно задать ещё один массив [input_array_Zero] 

nput_array_Zero:

  db 00 00 00 00 // заполнить его сразу нулями сколько там тебе нужно - 32 пары?

И потом сделать цикл такой же как и первый.

Циклы разделать flagom

 

Должно получиться.

 

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...
В 28.01.2019 в 20:36, Alex2411 сказал:

как  коротко задать длинную  последовательность одинаковых байт . например нулей

 

В 28.01.2019 в 20:43, Garik66 сказал:

не знаю

 

 

здесь мне хотели помочь  поэтому отвечу . может пригодиться

это можно  сделать командой resb и числом  скоько надо выделить  байт . число считаеться  как десятичное .
например

metka:
resb 20

выделит для metka  двадцать байт
если записать например

metka:
db 5
resb 11
db 7

тогда первый байт запишет 05 потом пропустит 11 байт нолей и запишет 07.
еще  можно применять  команды resw resd resq

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.