Перейти к основному содержимому

Скрипты в MultiProg

Что такое скрипты?

В MultiProg встроен скриптовый Lua-движок для автоматизации любых операций: прошивка, чтение памяти, патчинг байтов, создание пользовательских таргетов и многое другое. Компиляция не нужна — просто напишите .lua текстовый файл и запустите.

В текущей версии API скрипты в основном дают доступ к работе с hex-буфером, файлами и базовыми действиями программирования (подключение, чтение, запись, верификация, стирание). Низкоуровневые функции программаторов и таргетов (кастомные протоколы, отладочные регистры, прямые команды зондов) пока не доступны — это планируется в будущих версиях. Если у вас есть идеи или потребности — напишите нам.

Требования

Ничего дополнительного не нужно. Lua-движок встроен в MultiProg. MultiProg.exe содержит всё необходимое — отдельная установка Lua не требуется.

Запуск и отладка скриптов доступны только внутри MultiProg — внешней интеграции с IDE и автономного запускателя пока нет. Писать .lua файлы можно в любом текстовом редакторе, но запуск и отладка — через встроенную Script Console.

Версии движка

КомпонентВерсия
Lua5.5.1
Sol2 (C++ привязка)3.3.0
Script APIсмотрите в рантайме: mp.app.script_api_version()
Песочница

Стандартные Lua-библиотеки os и io НЕ доступны скриптам — os.clock, os.time, os.date, io.open и прочее вернут nil. Для timing и wall-clock используйте mp.utils.timestamp() / mp.utils.time() / mp.utils.date(), для файловой системы — mp.file.*. Полные string, table, math, bit (нативный для Lua 5.5) и coroutine доступны без изменений.

Быстрый старт

  1. Откройте MultiProg.
  2. Перейдите на вкладку Script Console (или Меню → Script → Script Console, Ctrl+L).
  3. Напишите скрипт в редакторе или выберите пример из Examples.
  4. Нажмите ▶ Run.

Первый скрипт

-- Показать текущую конфигурацию
local cfg = mp.config.get()
mp.log.info("Таргет: " .. cfg.target)
mp.log.info("Семейство: " .. cfg.family)
mp.log.info("Программатор: " .. cfg.programmer)

-- Список регионов памяти
local regions = mp.memory.get_regions()
for i, name in ipairs(regions) do
mp.log.info("Регион " .. i .. ": " .. name)
end

mp.log.success("Готово!")

Возможности редактора

  • Подсветка синтаксиса — ключевые слова Lua, mp.* вызовы, строки, числа, комментарии.
  • Автодополнение — введите mp. для списка всех модулей и функций.
  • Breakpoints — клик по номеру строки ставит/снимает точку останова (красная точка).
  • Навигация по ошибкам — при ошибке редактор подсвечивает и переходит на нужную строку.
  • REPL — поле ввода внизу для мгновенного выполнения выражений.
  • Вкладка API Reference — встроенная справка по всем функциям.

Остановка скрипта

Нажмите ■ Stop. В длинных циклах проверяйте mp.check_stop():

while not mp.check_stop() do
-- работа
mp.sleep(100)
end

Что внутри API

API на Lua состоит из 12 модулейmp core + 11 модулей с пространствами имён — суммарно около 235 функций. Подробности по каждому модулю — в справочнике API.

Куда дальше?