Я работаю над обфускатором lua и хочу, чтобы он мог переключаться с запутывания кода в файле, если нет аргументов, или запутывания строкового аргумента из lua cli. Если это не имело абсолютно никакого смысла, вот что я имею в виду.
local Code = function()
print("test")
end
Dumped = string.dump(Code)
if arg[1] then
local function Temp()
loadstring(arg[1])()
end
Dumped = string.dump(Temp)
end
Проблема в том, что в дампе на самом деле это не аргумент, а переменная. Итак, как мне обойти это и изменить свою строку на код? Извините, если я не понимаю.
Вот что я пробовал и проблема:
local Code = function()
print("test")
end
Dumped = string.dump(Code)
if arg[1] then
local function Temp()
loadstring(arg[1])()
end
Dumped = string.dump(Temp)
end
print(Dumped)
-- Say if we did lua file.lua print("hello world")
-- Expected result: LuaQ print hello world (with a bunch of whitespace in between)
-- Actual result: LuaQ arg[1] (also with a bunch of whitespace in between)
Прямо сейчас вы сбрасываете функцию, которая загружает строку и запускает ее. Таким образом, вы получаете дамп кода, который загружает строку и запускает ее. Ничего удивительного.
Если вы хотите сбросить какой-то другой код, вам нужно сбросить этот код:
local code, codeError = loadstring(arg[1])
if code == nil then
print("Error:",codeError)
else
Dumped = string.dump(code)
end
по-видимому, это просто возвращает nil в string.dump
@Ivan Я отредактировал ответ, чтобы вы могли увидеть, как получить сообщение об ошибке.
ну, вам придется загрузить код и сбросить его, вместо того, чтобы сбрасывать какой-то другой код, который загружает код и запускает его.