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

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

Запись от ranebull размещена 19.06.2014 в 14:23
Обновил(-а) ranebull 08.07.2014 в 08:57

Поводом для написания статьи стала эта тема Чем открыть 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")
Название: test_6.png
Просмотров: 5313

Размер: 1.3 Кб

Также 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.

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

Справка по 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.

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

Процесс дизассемблирования
Для процесса дизассемблирования воспользуемся дизассемблером luadec.exe.
Используем следующую команду для дизассемблирования:
Код:
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
Просмотров: 438
Размер:	12.1 Кб
ID:	2487Нажмите на изображение для увеличения
Название: test_11.png
Просмотров: 599
Размер:	12.6 Кб
ID:	2488

Справка по 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
Размещено в Other topics
Просмотров 17218 Комментарии 2
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для gru74ik
    Здоровско! Благодарю за статью.
    Запись от gru74ik размещена 01.08.2015 в 17:46 gru74ik вне форума
  2. Старый комментарий
    у меня аварианой не успев запуститься luadec прекращает свою работу,и создает пустой 1.lua
    Запись от scherbakovss201 размещена 29.06.2016 в 15:43 scherbakovss201 на форуме
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru