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

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

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

Размер: 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
Просмотров: 3031
Размер:	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
Просмотров: 3090
Размер:	12.1 Кб
ID:	2486Нажмите на изображение для увеличения
Название: test_8.png
Просмотров: 1485
Размер:	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
Просмотров: 1855
Размер:	12.1 Кб
ID:	2487Нажмите на изображение для увеличения
Название: test_11.png
Просмотров: 2349
Размер:	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 вне форума
 
Новые блоги и статьи
Статические свойства и методы в TypeScript
run.dev 20.04.2025
TypeScript прочно занял своё место в системе современной веб-разработки. Этот строго типизированный язык программирования не просто расширяет возможности JavaScript — он делает разработку более. . .
Batch Transform и Batch Gizmo Drawing API в Unity
GameUnited 20.04.2025
В мире разработки игр и приложений на Unity производительность всегда была критическим фактором успеха. Создатели игр постоянно балансируют между визуальной привлекательностью и плавностью работы. . .
Звук в Unity: Рандомизация с Audio Random Container
GameUnited 20.04.2025
В современных играх звуковое оформление часто становится элементом, который либо полностью погружает игрока в виртуальный мир, либо разрушает атмосферу за считанные минуты. Представьте: вы исследуете. . .
Максимальная производительность C#: Советы, тестирование и заключение
stackOverflow 20.04.2025
Погружение в мир микрооптимизаций C# открывает перед разработчиком целый арсенал мощных техник. Но как определить, где и когда их применять? Ответ начинается с точных измерений и профилирования. . . .
Максимальная производительность C#: Предсказание ветвлений
stackOverflow 20.04.2025
Третий ключевой аспект низкоуровневой оптимизации — предсказание ветвлений. Эта тема менее известна среди разработчиков, но её влияние на производительность может быть колоссальным. Чтобы понять. . .
Максимальная производительность C#: Векторизация (SIMD)
stackOverflow 20.04.2025
Помимо работы с кэшем, другим ключевым аспектом низкоуровневой оптимизации является векторизация вычислений. SIMD (Single Instruction, Multiple Data) позволяет обрабатывать несколько элементов данных. . .
Максимальная производительность C#: Процессорный кэш
stackOverflow 20.04.2025
Знакомство с внутренним устройством процессорного кэша — ключевой шаг в написании по-настоящему быстрого кода на C#. Этот слой архитектуры компьютера часто ускользает от внимания разработчиков, но. . .
Максимальная производительность C#: Введение в микрооптимизации
stackOverflow 20.04.2025
В мире разработки на C# многие привыкли полагаться на . NET Runtime, который "магическим образом" сам оптимизирует код. И часто это работает - современные JIT-компиляторы творят чудеса. Но когда речь. . .
MVC фреймворк в PHP
Jason-Webb 19.04.2025
Архитектурный паттерн Model-View-Controller (MVC) – это не просто модный термин из мира веб-разработки. Для PHP-программистов это фундаментальный подход к организации кода, который радикально меняет. . .
Dictionary Comprehensions в Python
py-thonny 19.04.2025
Python славится своей выразительностью и лаконичностью, что позволяет писать чистый и понятный код. Среди множества синтаксических конструкций языка особое место занимают словарные включения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru