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

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

Запись от ranebull размещена 19.06.2014 в 14:23
Показов 161017 Комментарии 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
Просмотров: 26597

Размер: 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
Просмотров: 3233
Размер:	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
Просмотров: 3204
Размер:	12.1 Кб
ID:	2486Нажмите на изображение для увеличения
Название: test_8.png
Просмотров: 1584
Размер:	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
Просмотров: 1950
Размер:	12.1 Кб
ID:	2487Нажмите на изображение для увеличения
Название: test_11.png
Просмотров: 2458
Размер:	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 вне форума
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru