С точностью до тысячной доли секунды можно посчитать задержку выполнения кода, что можно применить как счет производительности.
local x = os.clock()
local s = 0
for i=1,100000 do s = s + i end
print(string.format("elapsed time: %.3f\n", os.clock() - x))
После выполнения, показывает 2 тысячных секунды или 2 мс
elapsed time: 0.002
Можно посчитать прошедшее время для другой цели. Например, если цикл в отладке выполняется более 3 секунд, то это вероятно корневой цикл, а если менее, то
Legacy of Kain: Defiance
Это старая PC игра выпущена в районе 2003-2004 годах, когда я еще учился в школе в классе 11-ом.
В самом конце игры была сложная миссия сражения с боссом, никак не получалось её пройти.
Кстати из этой игры есть персонаж на аватаре у пользователя с форума Cheat Engine
Не мог пройти, как не пытался. То ли руки не из того места, пройти очень хотелось. Было у меня немного журналов игровых и там я много раз видел программу MTC. Ка
FINCSTP
Похожа на FSTP, также вращает стек регистров FPU (я кстати не знал, увидел при тестах в CE), но только не перемещает значение по адресу.
FSTP [здесь указывается адрес или регистр]
FINCSTP
Если нужно вытолкнуть значение из ST(0), а адрес куда его выталкивать не нуже
Особенности
1) переход на следующий адрес по инструкциям ветвления вычисляется Lua кодом по ret, jmp, jmp condition до исполнения кода
2) определение опкодов ветвления по readmem без дизассемблериования
3) по тестам последний брейкпоинт снимается на ближайшем цикле
Пример лога до близжайшего цикла, когда поднимается из рутины вверх
Если нужно найти начало и конец подстроки. Пример
Попробуем найти слово lab в троке gamehacklab.ru
print(string.find('gamehacklab.ru', 'lab'))
>9 11
Если не найдена подстрока, то вернет nil.
С помощью string.match можем выводить не индексы, а строку
print(string.match('gamehacklab.ru', 'lab'))
&
Есть такой плагин "AA Maker" и там довольно интересные регулярные выражения на Lua. Разберем некоторые выражения
Выражение ''%[(.*)%]' - захват всего, что в квадратных скобках
Пример
local s = 'mov eax, [ecx + 4]'
print(string.match(s, '%[(.*)%]'))
--> ecx + 4
Символ "%" нужно всегда ставить перед специальными символами такими как ^
Функция loadstring позволяет исполнять текст как код. Попробуем генерировать числа, сравнения чисел и логику И, ИЛИ.
Цель: просто пример.
Создать пары случайных чисел А и Б.
Случайно сравнить попарно.
Создать случайно логику "И, ИЛИ" и сравнить результаты сравнения до тех пор, пока не будут истинны
Можно в редакторе сделать автозавершение инструкци для CE Lua и даже для CE Autoassembler.
Накидал пример, может быть, кому интересно будет для других языков.
Установка. Поместить файл в директорию на скриншоте
lua.xml
Настройки
В архиве два файла. Функции
1. Контекстное меню. Компактное/ не компактное окно CE
2. Сохранение и загрузка положения и размера формы CE
3. Сохранение и загрузка компактного состояния формы или не компактного
Сделано на энтузиазме после написания класса сохранения и загрузки параметров.
После запуска, CE будет там, где её (CE) закрыли с по
На скриншоте 22 ветви трассеровки от адреса патронов не входя в call-ы до корневого цикла. Корневой цикл определяется, когда поиск происходит более трех секунд и не находит ничего. Вполне хватает этого времени. Буду еще повторно тестить и проверять доходит ли он цикла или надо еще что-то придумывать.
Желтым выделяется точка, вертикальная полоса ветви и связи с такими же узлами. Узел это адрес выхода из ret
На видео показано рисование через поток и рисование без потока
Когда происходит рисование без потока, то окно нельзя подвинуть, не работает кнопка и даже не возможно работать с Cheat Engine
Код:
&
Репозиторий
1. На адрес устанавливается брейкпоинт.
2. Идем в игру делаем или не делаем что-то
3. Начинают срабатывать инструкции на брейкпоинте
4. От каждой инструкции начинается трейслог, подобный тому, который есть
Открываем Lua консоль из дизассемблера
Пишем Lua скрипт
Дальше по шагам как на картинке
Сколько я не пользовался CE я никогда не знал об этом отладчике. Когда я случайно узнал, то был приятно удивлен.
Если мы пишем какую-то функцию и она дает сбой, то её можно отладить как на скриншоте. Это может быть и не функция.
Опубликованная в веб формате книга на официальном сайте.
Язык английский
Перейти
Оглавление книги
Книга о приемах программирования больших проектов, в которых огромное количество строк кода. Основная проблема, когда ты уже что-то написал и надо добавить в уже существующий проект внушительный функцио
В этой записи блога не будет чего-то, что показало бы "вау, это что-то новое и есть результат". Все сырое и результат пока мне только снится — быстрый поиск условий и включение, и выключение ветвей по этим условиям. Мыслю я не инструкциями, не группой инструкций, а ветвлениями кода и условиями, которые их запускают. Проще 20 ветвлений по 5 окон, чем тонна инструкций... Жаль пока теория, практики с результатом нет.
Рисунок. На нем слева п
Обновление плагина
Установка с репозитория: ссылка
Кратко
1. Добавил сохранение/загрузку параметров. Хранение в текстовом файле в папке autoruns
2. Добавил настройки графического интерфейса (слайдеры, пункт меню)
Подбронее
1. Нашел адрес патронов
2. Поставил брейкпоинт
3. Выкинул из рук Калаш с этими патронами
4. Увидел инструкцию, которая срабатывает когда что-то выкидываешь.
Решил зацепиться за эту инструкцию.
Либо спавн до инструкции, либо после.
Сделал трейслог из рутины на этой инструкции и
Связь точек линиями и связь через метод описанный в статье
Пример1. Слева линии, справа работа алгоритма
Пример2. Скриншот из pdf документа с разным значением коэфициента
Пример3. С альфа и без альфа канала
Функция loadstring исполняет строку кода как функцию.
f = loadstring ("print 'hello, world'")
f () --> hello, world
Есть еще и такая функция как string.dump. Она создает строку из функции
function f () print "hello, world" end
s = string.dump (f)
-- Можно строку тут же запустить как код
loadstring (s) () --> hello, world
Если по обратной связи строить и исполнять строку кода, то
Чтобы получить цвет из компонента нужно найти его на форме CE через Lazarus. Этот компонент нельзя найти визуально, он скрыт.
Узнал об этом случайно, когда зашел на форум Cheat Engine в тему расширений на Lua. Теперь в дизассемблере можно будет быстренько цвета менять
В игровом движке может быть следующая архитектура
Менеджер сцен
Список сцен
Сцена1
Менеджер игровых объектов
Список игровых объектов
Игровой объект1
Игровой объект2
Игровой объект3
Сцена2
Менеджер игровых объектов
Список игровых объектов