Что я могу получить из байт-кода lua, полученного через string.dump? - PullRequest
0 голосов
/ 30 декабря 2018

Я использую lua + luajit 2.0.4 и мне интересно - можно ли восстановить исходные части кода из дампов функций lua? function a(l) if l > 3 then print(l*l) end end local b = string.dump(a) В этом примере я выполняю string.dump функции 'a', и здесь я перехожу к следующим вопросам: 1) Можно ли записать этот дамп в файл .txt?2) Можно ли получить оригинальные имена функций, переменных, значений?3) Можно ли получить строки, числа, таблицы?4) Можно ли восстановить его до полного кода, а если нет, то можно ли получить разобранный листинг?

1 Ответ

0 голосов
/ 30 декабря 2018

«Да» на все вопросы с парой оговорок.Для (1) убедитесь, что «b» используется как часть параметра «mode» в io.open в Windows, так как вывод string.dump будет иметь некоторое двоичное содержимое.Для (2), это верно только тогда, когда string.dump используется без опции strip, которая была добавлена ​​в LuaJIT :

string.dump (f [, strip])

В string.dump () добавлен дополнительный аргумент.Если установлено значение true, генерируется «раздетый» байт-код без отладочной информации.Это ускоряет последующую загрузку байт-кода и уменьшает использование памяти.

Для (4) я нашел этот документ очень полезным: http://files.catwell.info/misc/mirror/lua-5.2-bytecode-vm-dirk-laurie/lua52vm.html (это для Lua 5.2, но большинство изконтент распространяется и на LuaJIT);он также включает в себя раздел о разнице между полным и разделенным байт-кодом, который может ответить на некоторые ваши вопросы.

...