Alex2411 Опубликовано 23 января, 2019 Поделиться Опубликовано 23 января, 2019 делаю фильтр на отсев . запутался как сделать сравнение . помогите пожалуйста нужно сравнить длинную последовательность байт начиная от адреса [eax+04] с последовательность которую я задаю сам . последоватеьность может быть разной длины от 1 до 32 байт . как правильно это сделать ? что бы сравнить все 32 байт я разбивал на части и пробовал сравнивать отдельные числа cmp [eax+04] потом c [eax+08] и дальше . получаеться сложно и не удобно , но наверно есть нормальный способ . в гугле я искал про сравнение строк , но не понял как правильно сделать в чит енжин . самое главное . мне нужно сравнивать последовательность ровно столко байт сколько я задаю , а не все 32 байт каждый раз. как это сделать объясните пожалуйст . Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 23 января, 2019 Поделиться Опубликовано 23 января, 2019 2 массива с одним индексом в цикле. xor edi, edi code: mov al, [ecx+04+di] mov bl, [input_array+di] cmp al, bl jne exit ... cmp edi, [len] je exit inc edi jmp code Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 23 января, 2019 Автор Поделиться Опубликовано 23 января, 2019 3 часа назад, partoftheworlD сказал: 2 массива с одним индексом в цикле. попробовал чит енжин ругаеться на mov al, [ecx+04+di] mov bl, [input_array+di] не хочет сохранять скрипт .если заменить di на edi то не ругаеться , но при активации скрипта игра на несколько секунда замирает , а потом или крашиться или останавливаеться системой . система пишет остановила выполнение данных что бы не повредить компьютер. регистры сохранял pushad и popad , а вместо cmp edi, [len] пока поставил cmp edi,8 как сравниваеться я вроде понял , но почему не работает ? что я не так сделал ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 24 января, 2019 Автор Поделиться Опубликовано 24 января, 2019 нашел причину крашей . проблема была в игре. крашилась когда в регистре были данные, а скрипт считал их как адрес . поставил фильтры перед скриптом отсеял только адреса . теперь скрипт работает нормально . спасибо за помощь. не знаю когда разрешат плюсы ставить теперь новая проблема появилась. не знаю как решить создал метку 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 тогда скрипт перестает правильно работать . как сделать когда я записываю из таблицы новую последовательность то что бы старая заполнялась вся нулями ? помогите пожалуйста Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 28 января, 2019 Автор Поделиться Опубликовано 28 января, 2019 не кто не знает как это сделать ? Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 января, 2019 Поделиться Опубликовано 28 января, 2019 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 - не будут учитываться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 28 января, 2019 Автор Поделиться Опубликовано 28 января, 2019 51 минуту назад, Garik66 сказал: задай len спасибо это я знаю , но это не то . каждый раз считать и задавать длину не удобно я хотел сделать что бы длина ставилась автоматом . вписал последовательнось 10 байт сосчитала только 10 , а если 20 то 20 . наверно ест такая команда в ассемлере , но я не знаю ее . по этому я сделал по другому . добавил в по байтовом сравнении каждый байт из метки [input_array+di] сравнение с нулем , а сравнение cmp edi, [len] вобще убрал. получаеться когда byte ptr [input_array+di] равно нулю то значит конец цикла . это отлично работает с текстом , но не получаеться с простой последовательностью байт там нет в конце нуля и сразу начинаются старые байты . может как то заполнять нулями кусок памяти , а потом задавать последовательность ? гарик объясни пожалуйста заодно как коротко задать длинную последовательность одинаковых байт . например нулей что бы записатть 32 байта нулями . искал в гугле нашел про дублирование dup , но в скрипт чит енжин применить не получилось Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 января, 2019 Поделиться Опубликовано 28 января, 2019 17 минут назад, Alex2411 сказал: как коротко задать длинную последовательность одинаковых байт не не знаю 17 минут назад, Alex2411 сказал: может как то заполнять нулями кусок памяти , а потом задавать последовательность ? тож не знаю у тебя эксклюзив так что наверное придется курить малуал СЕ main LUA ну или гуглить по ассемблеру, если не хочешь от СЕ отходить. 17 минут назад, Alex2411 сказал: может как то заполнять нулями кусок памяти , а потом задавать последовательность ? Хотя, как вариант - можно задать ещё один массив [input_array_Zero] nput_array_Zero: db 00 00 00 00 // заполнить его сразу нулями сколько там тебе нужно - 32 пары? И потом сделать цикл такой же как и первый. Циклы разделать flagom Должно получиться. 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 января, 2019 Поделиться Опубликовано 28 января, 2019 Зы только во втором цикле не сравнивать. а копировать. ЗЫ1: вот в это теме можешь посмотреть как быстро копирнуть. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 28 января, 2019 Автор Поделиться Опубликовано 28 января, 2019 19 минут назад, Garik66 сказал: не знаю жаль . ладно придумаю что то . все равно спасибо тебе большое что стараешься помогать странно сделан форум. жалобу на пост послать могу , а плюсик поставить нет . типа рано еще . лучше бы наоборот 19 минут назад, Garik66 сказал: у тебя эксклюзив да не вроде . это мне для многих игр нужно . полезная штука . с текстом у меня уже получилось как хотел. осталось найти решение для любой последовательности байт . 9 минут назад, Garik66 сказал: можешь посмотреть как быстро копирнуть ага видел эту тему . то же попробую фигасе . стигмаера забанили . только сейчас заметил Ссылка на комментарий Поделиться на другие сайты Поделиться
partoftheworlD Опубликовано 28 января, 2019 Поделиться Опубликовано 28 января, 2019 Только что, Alex2411 сказал: как хотел. осталось найти решение для любой последовательности байт Пиши свой алгоритм, который бы считал введеную тобой строку. Можно даже на основе того кода, что я кинул. Получить длинну можно с помощью вызова winapi функции типа strlen, результат будет в eax лежать. Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 28 января, 2019 Поделиться Опубликовано 28 января, 2019 1 час назад, Alex2411 сказал: ага видел эту тему у меня ощущение, что пропустил кое-что в моем посте. проблема в движке форума, он объединяет. некоторое время посты одного и тоже пользователя. думаю что пропустил вот это: 2 часа назад, Garik66 сказал: Хотя, как вариант - можно задать ещё один массив [input_array_Zero] nput_array_Zero: db 00 00 00 00 // заполнить его сразу нулями сколько там тебе нужно - 32 пары? И потом сделать цикл такой же как и первый. Циклы разделать flagom Должно получиться. Ссылка на комментарий Поделиться на другие сайты Поделиться
Alex2411 Опубликовано 9 ноября, 2020 Автор Поделиться Опубликовано 9 ноября, 2020 В 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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения