Скрипты в MultiProg
Что такое скрипты?
В MultiProg встроен скриптовый Lua-движок для автоматизации
любых операций: прошивка, чтение памяти, патчинг байтов, создание
пользовательских таргетов и многое другое. Компиляция не нужна —
просто напишите .lua текстовый файл и запустите.
В текущей версии API скрипты в основном дают доступ к работе с hex-буфером, файлами и базовыми действиями программирования (подключение, чтение, запись, верификация, стирание). Низкоуровневые функции программаторов и тарге тов (кастомные протоколы, отладочные регистры, прямые команды зондов) пока не доступны — это планируется в будущих версиях. Если у вас есть идеи или потребности — напишите нам.
Требования
Ничего дополнительного не нужно. Lua-движок встроен в MultiProg.
MultiProg.exe содержит всё необходимое — отдельная установка Lua
не требуется.
Запуск и отладка скриптов доступны только внутри MultiProg —
внешней интеграции с IDE и автономного запускателя пока нет. Писать
.lua файлы можно в любом текстовом редакторе, но запуск и отладка —
через встроенную Script Console.
Версии движка
| Компонент | Версия |
|---|---|
| Lua | 5.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 доступны без изменений.
Быстрый старт
- Откройте MultiProg.
- Перейдите на вкладку Script Console (или Меню → Script →
Script Console,
Ctrl+L). - Напишите скрипт в редакторе или выберите пример из Examples.
- Нажмите ▶ 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.
Куда дальше?
- Пример BSH PMM — реальный сценарий.
- Скрипты контрольных сумм — пользовательские чексум-калькуляторы на Lua.
- Справочник API — все 12 модулей.
- Примеры скриптов и Learning Lua — встроенные примеры плюс краткий справочник Lua для новичков.