Skip to content
  • CE Lua чистка памяти от утечек

    Плагин-строй
    2
    0 Голоса
    2 Сообщения
    51 Просмотры
    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

  • 0 Голоса
    1 Сообщения
    30 Просмотры
    Нет ответов
  • 0 Голоса
    2 Сообщения
    51 Просмотры
    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
    1a800863-fb55-46e7-a2b0-b3daed1613af-изображение.png
    Чтобы наглядно было. Свойства эти похожи на свойства из Дельфи. Можно загуглить, они поддробно описываются.

    Берем например свойство цвет. Прочитаем оригинальное и запишем свое любое

    local mainFormCE = getMainForm() print(mainFormCE.getColor()) > 536870912 -- в hex-е это 0x20000000. Можно перевести в калькуляторе или через print(string.format("%08X", 536870912))

    Случайное свое впишем ради наглядного примера
    mainFormCE.setColor(546484)

    72d5c265-f388-4d4f-b24c-f3dcb46d8f39-изображение.png

  • Lua ООП конспект

    Справочники
    1
    0 Голоса
    1 Сообщения
    24 Просмотры
    Нет ответов
  • FPU инструкция FINCSTP. Очистка ST(0)

    Справочники
    1
    0 Голоса
    1 Сообщения
    39 Просмотры
    Нет ответов
  • 0 Голоса
    2 Сообщения
    35 Просмотры
    MasterGHM

    С точностью до тысячной доли секунды можно посчитать задержку выполнения кода, что можно применить как счет производительности.

    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 секунд, то это вероятно корневой цикл, а если менее, то это вложенный цикл. На корневом цикле можно остановить трейслог. Об этом может быть потом напишу.

  • Обработка исключения в Cheat Engine Lua

    Приёмы
    1
    0 Голоса
    1 Сообщения
    38 Просмотры
    Нет ответов
  • Обработка исключения в Cheat Engine AA

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

    Приёмы
    1
    0 Голоса
    1 Сообщения
    25 Просмотры
    Нет ответов
  • Выполить текст, как код

    Приёмы
    1
    0 Голоса
    1 Сообщения
    26 Просмотры
    Нет ответов
  • Сверточные сети от МФТИ (лекция)

    Перенесена Видео
    1
    0 Голоса
    1 Сообщения
    28 Просмотры
    Нет ответов
  • Рубрика "Lua код сегодня" №4

    Обучающие примеры
    4
    0 Голоса
    4 Сообщения
    51 Просмотры
    MasterGHM

    Это C - язык программирования.

  • CE Вывод иерархии компонентов

    Плагин-строй
    1
    0 Голоса
    1 Сообщения
    35 Просмотры
    Нет ответов
  • Что в разделе

    Прикреплена Плагин-строй
    1
    0 Голоса
    1 Сообщения
    23 Просмотры
    Нет ответов
  • Рубрика "Lua код сегодня" №3

    Обучающие примеры
    1
    0 Голоса
    1 Сообщения
    34 Просмотры
    Нет ответов
  • Принципы управления

    Управление
    1
    0 Голоса
    1 Сообщения
    642 Просмотры
    Нет ответов
  • Асинхронное выполнение сценариев

    Приёмы
    1
    0 Голоса
    1 Сообщения
    28 Просмотры
    Нет ответов
  • Рубрика "Lua код сегодня" №2

    Обучающие примеры
    1
    0 Голоса
    1 Сообщения
    28 Просмотры
    Нет ответов
  • 0 Голоса
    3 Сообщения
    45 Просмотры
    MasterGHM

    Пользователь @Pitronic написал в Сделать большой брейкпоинт на структуру через dbk_useKernelmodeOpenProcess:

    Мы знаем что адрес таймера на выстрел во первых лежит в одной структуре с патронами, во вторых адрес в начале меняется в момент выстрела одновременно с уменьшением патронов и в пределах от одной до 100 миллисекунд возвращается в прежнее значение. может lua скрипт специальный можно сделать?

    Я бы сделал без скриптов.

    делаешь dessect structure
    6b8ca47d-ed90-46ea-95e7-cd454196cb74-изображение.png Далее как обычно. Создаешь структуру. Затем вот это (следить за изменениями)
    17867765-a66b-43e9-9242-482b0b8c7cf3-изображение.png ну а дальше воспроизводишь свой выстрел потом создаешь структуру из изменившихся данных (потому что их будешь очень много наверняка)
    783b72ad-84e9-4444-9d5f-c02f5beb20c3-изображение.png затем делаешь lock на структуру, чтобы значения зафиксирвать
    a8243497-20b9-4ad1-9a14-056b452cace1-изображение.png затем рядом создаешь второй ряд по ctrl +a и смотрим изменения в реальном времени (игра должна быть в оконном режим, чтобы мы видели как цифры скачут)
    227628c2-13fe-485d-8632-0defed52710b-изображение.png чтобы увидеть изменения менее 100мс нужно поставить интервал меньше
    5dff820a-cb72-45a6-b625-04112696daec-изображение.png

    По идее это должно сработать

  • Делаем EFLAGS таблицу

    Приёмы
    3
    0 Голоса
    3 Сообщения
    42 Просмотры
    MasterGHM

    Ответил