Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 679

Записи в этом блоге

Визуализация графов. Метод связывания ребер

Связь точек линиями и связь через метод описанный в статье   Пример1. Слева линии, справа работа алгоритма     Пример2. Скриншот из pdf документа с разным значением коэфициента     Пример3. С альфа и без альфа канала   &#

MasterGH

MasterGH

Пошаговая отладка Lua скриптов в Cheat Engine

Открываем Lua консоль из дизассемблера Пишем Lua скрипт Дальше по шагам как на картинке   Сколько я не пользовался CE я никогда не знал об этом отладчике. Когда я случайно узнал, то был приятно удивлен. Если мы пишем какую-то функцию и она дает сбой, то её можно отладить как на скриншоте. Это может быть и не функция.

MasterGH

MasterGH

FPU инструкция FINCSTP. Очистка ST(0)

FINCSTP     Похожа на FSTP, также вращает стек регистров FPU (я кстати не знал, увидел при тестах в CE), но только не перемещает значение по адресу.   FSTP [здесь указывается адрес или регистр] FINCSTP   Если нужно вытолкнуть значение из ST(0), а адрес куда его выталкивать не нуже

MasterGH

MasterGH

Работа с системой контроля версий в команде разработчиков

Инфа по совместной работе с гитом. Может быть пригодится кому, а может и нет. Такую систему я использую на работе недавно.   Можно совместно работать над одним большим проектом через git-flow. Возможно, кто-то из форумчан тоже использует git flow на работе.     Кратко. Модель контроля версии построена на 4 ветках   master - релизы develop - разработка feature - фичи hotfix - исравления   С develop начинается разработка через копирования в ветк

MasterGH

MasterGH

Cheat Engine 6.7 и Lua. Часть 4

Решил попробовать написать CE Lua  скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет.   Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096).   Я не успел сделать определение типа, но смещения внутри структуры получить я успел.   Итак, находим начало стру

MasterGH

MasterGH

CE Lua. Ищем свойства userData.

UserData в Lua это пользовательский тип.  Точно не знаю, но я думаю  в документации в CE Lua (celua.txt или здесь на офф. сайте) тип userData у всех классов или большинства классов. Например,  проверим, что главная форма CE это userData тип local mainFormCE = getMainForm() print(type(mainFormCE)) > userdata (вывод из консоли) Выводим список свойств следующим образом через getmetatable функцию. Метатаблица — это  особая  таблица свойств Lua-переменной (подробнее здесь) local mainF

MasterGH

MasterGH

Программирование с помощью патернов проектирования

Отличная книга по изучению паттернов проектирования. Ее можно читать со шпаргалкой по паттернам (иллюстрацию по паттернам можно загуглить). Перед этим еще загуглить SOLID + Unity . До кучи еще алгоритмы и структуры данных.  Все это  пригодится, чтобы пойти работать на программиста игр или приложений с разными типами реальности: дополненная, виртуальная и смешанная. А так же сейчас можно встретить вакансии по программированию не только Android, iOS устройств, шлемов и очков, но раз

MasterGH

MasterGH

CE Lua 7.0 Поиск по формуле

В таблице поиска есть колонки ссылающиеся на название Lua перменных: "value" и "previousvalue"   А что можно делать?   Сравнивать текущее и предыдущие значения вместе или по отдельности, в том числе на разных вкладках CE   Примеры: value == 65 value == 0x65 (или поставить галку hex) value ~= 65 (или поставить галку not) Можно и такое  сравнение сделать после поиска неизвестного используя математические функции: math.abs(value - previousvalue)

MasterGH

MasterGH

Абстрактный игровой движок. Базовая архитектура

В игровом движке может быть следующая архитектура   Менеджер сцен     Список сцен         Сцена1           Менеджер игровых объектов             Список игровых объектов                 Игровой объект1                 Игровой объект2                 Игровой объект3         Сцена2           Менеджер игровых объектов             Список игровых объектов               

MasterGH

MasterGH

CE Lua программа пишет программу

Функция 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 Если по обратной связи строить и исполнять строку кода, то

MasterGH

MasterGH

Lua Plugin CE Disassembler

Обновление плагина   Установка с репозитория: ссылка     Кратко 1. Добавил сохранение/загрузку параметров. Хранение в текстовом файле в папке autoruns 2. Добавил настройки графического интерфейса (слайдеры, пункт меню) Подбронее  

MasterGH

MasterGH

Ветвления кода связанные с адресом

В этой записи блога не будет чего-то, что показало бы "вау, это что-то новое и есть результат". Все сырое и результат пока мне только снится — быстрый поиск условий и включение, и выключение ветвей по этим условиям. Мыслю я не инструкциями, не группой инструкций, а ветвлениями кода и условиями, которые их запускают. Проще 20 ветвлений по 5 окон, чем тонна инструкций... Жаль пока теория, практики с результатом нет.   Рисунок. На нем слева п

MasterGH

MasterGH

Книга программиста из Electronic Arts (официальная ссылка)

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

MasterGH

MasterGH

CE Lua рисование отдельным потоком

На видео показано рисование через поток и рисование без потока Когда происходит рисование без потока, то окно нельзя подвинуть, не работает кнопка и даже не возможно работать с Cheat Engine           Код:     &

MasterGH

MasterGH

Трассеровка по ретам. Скриншот

  На скриншоте 22 ветви трассеровки от адреса патронов не входя в call-ы до корневого цикла. Корневой цикл определяется, когда поиск происходит более трех секунд и не находит ничего. Вполне хватает этого времени. Буду еще повторно тестить и проверять доходит ли он цикла или надо еще что-то придумывать. Желтым выделяется точка, вертикальная полоса ветви и связи с такими же узлами. Узел это адрес выхода из ret

MasterGH

MasterGH

Форма Cheat Engine

В архиве два файла. Функции 1. Контекстное меню. Компактное/ не компактное окно CE 2. Сохранение и загрузка положения и размера формы CE 3. Сохранение и загрузка компактного состояния формы или не компактного   Сделано на энтузиазме после написания класса сохранения и загрузки параметров. После запуска, CE будет там, где её (CE) закрыли с по

MasterGH

MasterGH

Notepad++ и CE Lua. Автозавершение строк

  Можно в редакторе сделать автозавершение инструкци для CE Lua и даже для CE Autoassembler.   Накидал пример, может быть, кому интересно будет для других языков. Установка. Поместить файл в директорию на скриншоте   lua.xml   Настройки

MasterGH

MasterGH

Пример. Lua генерируем код

Функция loadstring позволяет исполнять текст как код. Попробуем генерировать числа, сравнения чисел и логику И, ИЛИ. Цель: просто пример.   Создать пары случайных чисел А и Б. Случайно сравнить попарно. Создать случайно логику  "И, ИЛИ" и сравнить результаты сравнения до тех пор, пока не будут истинны    

MasterGH

MasterGH

Часть1. Lua. Захват выражения в квадратных скобках

Есть такой плагин "AA Maker" и там довольно интересные регулярные выражения на Lua. Разберем некоторые выражения   Выражение ''%[(.*)%]' - захват всего, что в квадратных скобках   Пример local s = 'mov eax, [ecx + 4]' print(string.match(s, '%[(.*)%]')) --> ecx + 4 Символ "%" нужно всегда ставить перед специальными символами такими как ^

MasterGH

MasterGH

Часть2. Lua простые регулярные выражения

Если нужно найти начало и конец подстроки. Пример Попробуем найти слово lab в троке gamehacklab.ru print(string.find('gamehacklab.ru', 'lab')) >9 11 Если не найдена подстрока, то вернет nil.   С помощью string.match можем выводить не индексы, а строку print(string.match('gamehacklab.ru', 'lab')) &

MasterGH

MasterGH

CE Lua выход из рутины до ближайшего цикла

Особенности 1) переход на следующий адрес по инструкциям ветвления вычисляется Lua кодом по ret, jmp, jmp condition до исполнения кода 2) определение опкодов ветвления по readmem без дизассемблериования 3) по тестам последний брейкпоинт снимается на ближайшем цикле   Пример лога до близжайшего цикла, когда поднимается из рутины вверх &#

MasterGH

MasterGH

Lua счет произвиодительности

С точностью до тысячной доли секунды можно посчитать задержку выполнения кода, что можно применить как счет производительности. 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 секунд, то это вероятно корневой цикл, а если менее, то

MasterGH

MasterGH

Lua Regex Tester (Cheat Engine)

Используется UDF1.CELabel1.Caption = string.match(stringLine, stringPattern)   Для запуска нужна CE 6.4. string.match.CETRAINER

MasterGH

MasterGH

Tool CE Lua Regular Expression

Установка: 1. Файл GHL_ClassSettings.lua закинуть в autorun (нужен для сохранения и загрузки данных формы) 2. Двойной клик на Lua Regular expression.CETRAINER вызовет это окно   Описание: - Для тренировки и проверки написания регулярных выражений - Выбор извлечения строк в виде одной или в виде последовательности - При нажатии на кнопку или при вводе текста в memo вычисляется выражение Lua Regular expression.CETRAINER GHL_ClassSettings.lua

MasterGH

MasterGH

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

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

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