Форум программистов, компьютерный форум, киберфорум
ranebull
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

LUA - компиляция, декомпиляция и дизассемблирование

Запись от ranebull размещена 19.06.2014 в 14:23
Показов 163356 Комментарии 2
Метки lua

Поводом для написания статьи стала эта тема Чем открыть Lua-файл.

Немножко об языке:
Lua — интерпретируемый язык программирования, разработанный подразделением Tecgraf Католического университета Рио-де-Жанейро (Computer Graphics Technology Group of Pontifical Catholic University of Rio de Janeiro in Brazil). Разработанный интерпретатор является свободно распространяемым, с открытыми исходными текстами на языке Си.

По возможностям, идеологии и реализации язык ближе всего к JavaScript, однако Lua отличается более мощными и гораздо более гибкими конструкциями. Хотя Lua не содержит понятия класса и объекта в явном виде, механизмы объектно-ориентированного программирования, включая множественное наследование, легко реализуются с использованием метатаблиц, которые также отвечают за перегрузку операций и т. п. Реализуемая модель объектно-ориентированного программирования — прототипная (как и в JavaScript).

Язык широко используется для создания тиражируемого программного обеспечения — в частности, на нём написан графический интерфейс пакета Adobe Lightroom. Также получил известность как язык программирования уровней и расширений во многих играх (например, World of Warcraft) из-за удобства встраивания, скорости исполнения кода и лёгкости обучения.
Для написания Lua-скриптов можно воспользоваться любым текстовым редактором и интерпретатором (LuaBinaries), либо воспользоваться сервисами ideone, codepad и т.д.

Напишем тестовый скрипт (назовем файл 1.lua):
Code
1
print ("Hello World")
Название: test_6.png
Просмотров: 27260

Размер: 1.3 Кб

Также Lua имеет возможность компиляции скриптов.

Процесс компиляции
Для компилирования скрипта можно воспользоваться десктопным компилятором luac, который входит в дистрибутив LuaBinaries, либо сервисом Compile Lua file.
Для компиляции воспользуемся интерпретатором командной строки cmd.exe и lua-компилятором - luac.exe.
Переходим в директорию, где у нас установлен lua-компилятор (у меня c:\Users\Home\Downloads\lua-5.1.5_Win32_bin\)
и используем следующую команду для компиляции:
Code
1
c:\Users\Home\Downloads\lua-5.1.5_Win32_bin>luac5.1.exe -o 2.luac 1.lua
где 1.lua - наш скрипт (входной файл), а 2.luac - скомпилированный скрипт (выходной файл). И получаем в текущей директории (c:\Users\Home\Downloads\lua-5.1.5_Win32_bin\) файл 2.luac.

Нажмите на изображение для увеличения
Название: test_7.png
Просмотров: 3341
Размер:	12.6 Кб
ID:	2484

Справка по luac:
Code
1
2
3
4
5
6
7
8
Available options are:
  -        process stdin
  -l       list
  -o name  output to file 'name' (default is "luac.out")
  -p       parse only
  -s       strip debug information
  -v       show version information
  --       stop handling options
Процесс декомпиляции
Для процесса декомпиляции воспользуемся декомпилятором luadec.exe (а также и дизассемблером) из Github-репозитория.
Скачать его можно отсюда LuaDec
Распаковываем декомпилятор/дизассемблер (c:\Users\Home\Downloads\luadec51_2.0.1_ win32_bin\). Используем следующую команду для декомпиляции:
Code
1
luadec 2.luac > 1.lua
где 2.luac - наш скомпилированный скрипт (входной файл), а 1.lua - декомпилированный скрипт (выходной файл). И получаем в текущей директории (c:\Users\Home\Downloads\lua-5.1.5_Win32_bin\) файл 1.lua.

Нажмите на изображение для увеличения
Название: test_9.png
Просмотров: 3246
Размер:	12.1 Кб
ID:	2486Нажмите на изображение для увеличения
Название: test_8.png
Просмотров: 1627
Размер:	4.6 Кб
ID:	2485

Процесс дизассемблирования
Для процесса дизассемблирования воспользуемся дизассемблером luadec.exe.
Используем следующую команду для дизассемблирования:
Code
1
luadec -dis 2.luac > 3.txt
где 2.luac - наш скомпилированный скрипт (входной файл), а 3.txt - дизассемблированный скрипт (выходной файл). И получаем в текущей директории (c:\Users\Home\Downloads\lua-5.1.5_Win32_bin\) файл 3.txt.

Нажмите на изображение для увеличения
Название: test_10.png
Просмотров: 2012
Размер:	12.1 Кб
ID:	2487Нажмите на изображение для увеличения
Название: test_11.png
Просмотров: 2477
Размер:	12.6 Кб
ID:	2488

Справка по luadec:
Code
1
2
3
4
5
6
7
8
9
10
11
usage: luadec.exe [options] [filename].  Available options are:
  -        process stdin
  -d       output information for debugging the decompiler
  -dis     don't decompile, just disassemble
  -f num   decompile only num-th function (0=main block)
  -l LDS   declare locals as defined by LDS
  -l2 LDS2 declare locals as defined by LDS2
  -dg      disable built-in local guessing
  -pg      don't run just print out the LDS2 string used
  -a       always declare all register as locals
  --       stop handling options
Полезные ссылки:
Lua - Википедия
cmd - Википедия
luac man page
Luadec - Github
LuaBinaries - SourceForge
Про Lua
Скриптовый язык Lua
Compile Lua file
Ideone
Codepad
Метки lua
Размещено в Other topics
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для sourcerer
    Здоровско! Благодарю за статью.
    Запись от sourcerer размещена 01.08.2015 в 17:46 sourcerer вне форума
  2. Старый комментарий
    у меня аварианой не успев запуститься luadec прекращает свою работу,и создает пустой 1.lua
    Запись от inquisitor размещена 29.06.2016 в 15:43 inquisitor вне форума
 
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru