Вы находитесь на странице: 1из 5

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):
print ("Hello World")

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


Процесс компиляции
Для компилирования скрипта можно воспользоваться десктопным
компилятором luac, который входит в дистрибутив LuaBinaries, либо
сервисом Compile Lua file.
Для компиляции воспользуемся интерпретатором командной строки
cmd.exe и lua-компилятором - luac.exe.
Переходим в директорию, где у нас установлен lua-компилятор (у меня
c:\Users\Home\Downloads\lua-5.1.5_Win32_bin\) и используем
следующую команду для компиляции:
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.

Справка по luac
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\). Используем
следующую команду для декомпиляции:
luadec 2.luac > 1.lua

где 2.luac - наш скомпилированный скрипт (входной файл), а 1.lua -


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

где 2.luac - наш скомпилированный скрипт (входной файл), а 3.txt -


дизассемблированный скрипт (выходной файл). И получаем в текущей
директории (c:\Users\Home\Downloads\lua-5.1.5_Win32_bin\) файл
3.txt.
Справка по luadec
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