• Поиск данных в окне Tracer

    MasterGH tracer ce lua
    1
    0 Голоса
    1 Сообщения
    36 Просмотры
    Нет ответов
  • Создать структуру программно

    Программирование ce structure ce lua
    2
    2
    0 Голоса
    2 Сообщения
    47 Просмотры
    MasterGHM
    Решил попробовать написать CE Lua скрипт, который прочесывает структуру и в Dissect data/structures окне создавал бы структуру только со смещениями, с которыми код работает, т.е. читает или пишет. Например, мой персонаж прогуливается по городу, а каждые 200 мс ставится брейкпоинт на смещение +1 до гипотетической N границы структуры (например до 4096). Я не успел сделать определение типа, но смещения внутри структуры получить я успел. Итак, находим начало структуры любой. Запускаем Lua скрипт и просто что-то делаем в игре. Потом вылазит текст с дизассемблированными инструкциями и смещениями. Уже по этим логам можно определить вручную к каким смещением было обращение (адреса по ним мы и будем менять или сравнивать структуры между собой позже) по виду инструкции и соседнему смещению уже примерно можно определить тип данных и их размер Осталось сделать определение типа, а это не так уж долго сделать и осталось взять код из предыдущих записей в блоге формирования структуры в окне dessect data. Так мы получим структуру только с активными смещениями, (а зачем нам пассивные?) и определим в них тип, я надеюсь определим правильно Пример кода, который я использовал addressStructure1 = 0x412E0200 --> адрес начала структуры в любой игре sizeStructure = 100 --> гипототический размер структуры 100 для быстрых поисков, по умолчанию 4096 indexStructure = 0 --> индекс внутри структуры, который будет перемещаться вместе с breakPointAddress breakPointAddress = 0 --> адрес, на который сейчас постален брейкпоинт waitTimeTillBreak = 300 --> частота активности смещеиня resultText = '' --> конкатенация частей текста в этой переменной \-- Функция пытается поставить брейкпоинт на следующий байт в структуре function TryNextSetBreakPointToAddress() debug_removeBreakpoint(breakPointAddress) indexStructure = indexStructure + 1 if indexStructure > sizeStructure then debugTimer.Interval = 1000 debugTimer.Enabled = false debugTimer.destroy() debug_continueFromBreakpoint(co_run) print(resultText) --> вывод результата с завершением отладки return end breakPointAddress = addressStructure1 + indexStructure debug_setBreakpoint(breakPointAddress, 1, bptAccess, bpmDebugRegister) debug_continueFromBreakpoint(co_run) end \-- Любимая функция снятия отладочных данных function debugger_onBreakpoint() -- проверить обращение к структуре prevAddress = getPreviousOpcode(RIP) resultText = resultText..string.format('Offset: + %X : %s', indexStructure, disassemble(prevAddress)) .. '\r\n' TryNextSetBreakPointToAddress() return 1 end \-- Простой таймер debugTimer = createTimer(nil, false) debugTimer.OnTimer = function(timer) TryNextSetBreakPointToAddress() end debugTimer.Interval = waitTimeTillBreak debugTimer.Enabled = true breakPointAddress = addressStructure1 + indexStructure debug_setBreakpoint(breakPointAddress, 1, bptAccess, bpmDebugRegister)
  • Как контролировать включение и выключение скриптов в таблице

    Программирование ce lua условие управление
    1
    0 Голоса
    1 Сообщения
    41 Просмотры
    Нет ответов
  • Часть1. Lua простые регулярные выражения

    Программирование ce lua regular
    1
    1
    0 Голоса
    1 Сообщения
    93 Просмотры
    Нет ответов
  • Часть2. Lua простые регулярные выражения

    Программирование lua regular ce lua
    1
    0 Голоса
    1 Сообщения
    40 Просмотры
    Нет ответов
  • Рубрика "Lua код сегодня" №6 (проверка по md5)

    Обучающие примеры md5 ce lua speak важно обучалка фишки
    1
    0 Голоса
    1 Сообщения
    175 Просмотры
    Нет ответов
  • CE рисование через дополнительный поток

    Видео ce thread ce lua ce draw ce видео
    1
    0 Голоса
    1 Сообщения
    30 Просмотры
    Нет ответов
  • Cheat Engine и Lua. Старт

    Прикреплена Перенесена Программирование ce lua
    1
    0 Голоса
    1 Сообщения
    178 Просмотры
    Нет ответов
  • Большой брейкпоинт page exceptions

    Приёмы breakpoint фишки ce lua
    1
    4
    0 Голоса
    1 Сообщения
    33 Просмотры
    Нет ответов
  • Запустить активирющий скрипт CE 7.5

    Управление ce aa active rec ce lua важно
    5
    1 Голоса
    5 Сообщения
    187 Просмотры
    MasterGHM
    Кнопка "^"
  • Lua ООП конспект

    Справочники ce lua oop
    1
    0 Голоса
    1 Сообщения
    30 Просмотры
    Нет ответов
  • Функция autoAssemble

    Приёмы ce aa ce lua autoassemble
    2
    1 Голоса
    2 Сообщения
    2k Просмотры
    PitronicP
    Пользователь @MasterGH написал в Функция autoAssemble: // Скрипт похожий на таблицу АА Маленькое замечание. Два слеша используются для коментариев в асм. На луа используются пунктир не менее двух чёрточек. Если пользователь не разбирается, он не поймёт почему луа выдаёт ошибку. Тему поправил.
  • CE Lua чистка памяти от утечек

    Плагин-строй ce lua ce plugin memory leak
    2
    0 Голоса
    2 Сообщения
    61 Просмотры
    MasterGHM
    Оптимизация CE Lua кода по сборке мусора Есть инструкции, которые добавляют мусора больше чем другие. Показываем объем памяти мусора print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) Ниже код того как попробовать узнать сколько мусора добавил код при парсинге ассемблерной строки двумя способами local s = " 0045464A - FF 05 A4B54500 - inc [0045B5A4] { [000003EA] }" function GetDebugString(address) return splitDisassembledString(s) end \-- address, bytes, opcode function GetDebugString2(address) local clearString = string.gsub(s, '%s','') return string.match(clearString, '^(.-)%-(.-)%-(.-)$') end function NoOptimizeCode() GetDebugString2() end function OptimizeCode() GetDebugString() end local countRepeat = 500000 -- add more cycle local x1 = 0 local x2 = 0 x1 = getTickCount() print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) for i = 1, countRepeat do NoOptimizeCode() end print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) x2 = getTickCount() for i = 1, countRepeat do OptimizeCode() end print(string.format('Lua memory usage %.1f MiB',collectgarbage('count')/1024)) print(string.format("%.2f", (x2 - x1)/(getTickCount() - x2)) ) Пример результатов могут отличаться. Фиг его знает почему. Возможно работает сборщик мусора в разные моменты времени Lua memory usage 1.8 MiB Lua memory usage 1.8 MiB Lua memory usage 1.8 MiB 1.49 Lua memory usage 1.8 MiB Lua memory usage 2.3 MiB Lua memory usage 2.3 MiB 1.47 Lua memory usage 2.3 MiB Lua memory usage 2.8 MiB Lua memory usage 2.8 MiB 1.49
  • Обработка исключения в Cheat Engine Lua

    Приёмы ce lua exception
    1
    0 Голоса
    1 Сообщения
    41 Просмотры
    Нет ответов
  • Считаем размер инъекции в байтах

    Приёмы ce lua фишки ce aa
    1
    2
    0 Голоса
    1 Сообщения
    30 Просмотры
    Нет ответов
  • Выполить текст, как код

    Приёмы фишки ce lua loadstring
    1
    0 Голоса
    1 Сообщения
    29 Просмотры
    Нет ответов
  • CE Lua ColorPicker (скрытый компонент)

    Плагин-строй ce plugin ce lua ce components
    6
    1
    0 Голоса
    6 Сообщения
    100 Просмотры
    PitronicP
    значит не мой случай, мне женька только экзешники скинул, а как я понял нужны полностью исходники.
  • CE вывод списка записей и вывод свойств компонентов

    Плагин-строй ce lua ce plugin ce components userdata
    2
    2
    0 Голоса
    2 Сообщения
    61 Просмотры
    MasterGHM
    Ищем свойства userData. UserData в Lua это пользовательский тип. Точно не знаю, но я думаю в документации в CE Lua (celua.txt или здесь на офф. сайте) тип userData у всех классов или большинства классов. Например, проверим, что главная форма CE это userData тип local mainFormCE = getMainForm() print(type(mainFormCE)) > userdata (вывод из консоли) Выводим список свойств следующим образом через getmetatable функцию. Метатаблица — это особая таблица свойств Lua-переменной local mainForm = getMainForm() local listUserData = createStringlist() for k,_ in pairs(getmetatable(mainForm)) do listUserData.add(k) end local allowCustomInput = false local id, name = showSelectionList("Title", "Caption", listUserData, allowCustomInput) print ('Index: '..id..", Name: "..name) listUserData.destroy() Результат в виде списка свойство переменной mainForm Чтобы наглядно было. Свойства эти похожи на свойства из Дельфи. Можно загуглить, они поддробно описываются. Берем например свойство цвет. Прочитаем оригинальное и запишем свое любое local mainFormCE = getMainForm() print(mainFormCE.getColor()) > 536870912 -- в hex-е это 0x20000000. Можно перевести в калькуляторе или через print(string.format("%08X", 536870912)) Случайное свое впишем ради наглядного примера mainFormCE.setColor(546484)
  • Рубрика "Lua код сегодня" №5 (активирующий скрипт)

    Прикреплена Обучающие примеры ce lua ce aa active rec ce memrec важно обучалка
    3
    3
    0 Голоса
    3 Сообщения
    75 Просмотры
    MasterGHM
    Update: Если скрипт не запускается, то вызывать reinitializeSymbolhandler(true) Пример здесь
  • CE Вывод иерархии компонентов

    Плагин-строй ce plugin ce lua ce components
    1
    1
    0 Голоса
    1 Сообщения
    40 Просмотры
    Нет ответов