tirion Опубликовано 25 марта, 2015 Поделиться Опубликовано 25 марта, 2015 (изменено) Это очень странно.. при таком зацикливании функции отрабатывают в течение 5сек и затем игра вылетает. Но если вручную быстро кликать Enable Disable, то все нормально. Поэтому, думаю, тут дело не в таймере Изменено 25 марта, 2015 пользователем tirion Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 марта, 2015 Поделиться Опубликовано 25 марта, 2015 течение 5сек и затем игра вылетает.А без sleep, пробовал:[ENABLE]alloc(newmem,4096)CREATETHREAD(newmem);label(flag)registersymbol(flag)newmem:push 00mov ecx,023FB090call 0x00393A20mov ecx,eaxcall 0x00366100cmp byte ptr [flag],0jne newmemretflag:db 1[DISABLE]unregistersymbol(flag)dealloc(newmem) Ссылка на комментарий Поделиться на другие сайты Поделиться
tirion Опубликовано 25 марта, 2015 Поделиться Опубликовано 25 марта, 2015 (изменено) да и без слип пробовал, но без интервала логично что игра рухнет Изменено 25 марта, 2015 пользователем tirion Ссылка на комментарий Поделиться на другие сайты Поделиться
Garik66 Опубликовано 25 марта, 2015 Поделиться Опубликовано 25 марта, 2015 но без интервала логично что игра рухнетНе уверен.Тогда поставь бряки и посмотри, что с ESP происходит, может быть опять смещается. Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 25 марта, 2015 Поделиться Опубликовано 25 марта, 2015 Эксперты, подскажите, это корректное зацикливание потока?Это фигнят.к. sleep будет работать только для Cheaet Engine. а не для потока, который ты создал через Createthread(newmem). Значительно бОльшую часть игровых функций находящихся не в секции импорта и экспорта вызывать не так просто, но я уверен, что это посильная задача не говоря уже о том, что это невозможно. Первая проблема, с которой приходится сталкиваться мне - это нехватка практики вызова игровых функций, и средненькие или подзабытые знания о системном программирование ОС Windows на WinAPI. Для решения проблемы надо вспомнить перечитать, почитать углубленно про потоки, про компиляторы, стек, функции, а также любые статьи и исследования по вызову функций. Начиная с офицальной документации и заканчивая поиском по Гуглу. Вторая проблема, это специфика работы потоков. Насколько я помню (к сожалению сейчас не хочу проверять) два потока не могут одновременно исполнять одну и ту же секцию кода и для этого надо использовать специальные команды ожидания работы потоков... Т.е. если будет случай, что два потока в одной секции кода, то это может перевести к закрытию приложения. Createthread(newmem) может привести к конфликту потоков, особенно если новый поток секцию кода другого потока использует сверх часто, часто или даже разово. Третья проблема в том, что на участке вызова (в отладочном коде) свой контекст потока с регистрами, данными стека, а еще хуже того с указателями на временные данные, которые могли в лучшем случае появиться от начала загрузки сцены игры, а в худшем - на определенной ветви программы до вызова call, который мы хотели бы повторить своим потоком. Для корректной работы мы должны все данные учитывать и инициализировать перед вызовом функции. Четвертая проблема - код после желаемой call, который хотели бы вызвать. После желаемой функции call могут идти функции, которые чистят предыдущие данные или помещают их по адресам для дальнейшей работы. Это говорит о том, что мы не можем просто вызывать одну call, а надо еще и после этого что-то сделать. Я думаю, что меньше все проблем у функций: 1) функции - обработчики событий (системных или игровых) без аргументов функций или с ними. В основном срабатываемые по горячим клавишам или же по действиям в игре. Например, функция обрабатывающая событие, что игрок1 получил опыт, сделав что-то в игре (подняв предмет, выполнив какой-то квест)2) функции в секции экспорта, импорта для exe и dll файлов. Эти функции должны с относительно меньшим шансом вызывать сбои, передав правильно аргументы функций. Но все же может так, что надо учитывать код до и после выполнения этих функций. Пока самый лучший вариант я вижу - заставлять игру вызывать функции искусственно меняя условия в игре через правку кода или правку данных. Т.е. найти условия и данные, по которым вызывается функция и создать эти условия искусственно. Например, можно править счетчики данных, что приведет к вызову функции. Если счетчик патронов в обойме меньше 0, то вызовется функция перезарядки и на не придется её вызывать лишним потоком. Да, нам не нужна функция перезарядки в читах, это просто пример. Например, в цикле проверяется постоянно условие, не случилось ли чего в игре, после чего произойдет вызов ветви кода с желаемым результатом. Т.е. мы можем поправить чуток код проверки условия или поправить данные адресов, что приведет к желаемому вызову функции... Такие дела...[ENABLE]alloc(newmem,4096)CREATETHREAD(newmem);label(flag)registersymbol(flag)newmem:push 00mov ecx,023FB090call 0x00393A20mov ecx,eaxcall 0x00366100{$lua}sleep(1000){$asm}cmp [flag],0jne newmemretflag:db 1[DISABLE]unregistersymbol(flag)dealloc(newmem){$lua}sleep(1000) Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения