Как сбросить строку из аргументов, если они есть из lua cli или сбросить код в файл, если аргументов нет

Я работаю над обфускатором 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)

ну, вам придется загрузить код и сбросить его, вместо того, чтобы сбрасывать какой-то другой код, который загружает код и запускает его.

user253751 18.11.2022 15:50
Шаблоны Angular PrimeNg
Шаблоны Angular PrimeNg
Как привнести проверку типов в наши шаблоны Angular, использующие компоненты библиотеки PrimeNg, и настроить их отображение с помощью встроенной...
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Создайте ползком, похожим на звездные войны, с помощью CSS и Javascript
Если вы веб-разработчик (или хотите им стать), то вы наверняка гик и вам нравятся "Звездные войны". А как бы вы хотели, чтобы фоном для вашего...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Начала с розового дизайна
Начала с розового дизайна
Pink Design - это система дизайна Appwrite с открытым исходным кодом для создания последовательных и многократно используемых пользовательских...
Шлюз в PHP
Шлюз в PHP
API-шлюз (AG) - это сервер, который действует как единая точка входа для набора микросервисов.
14 Задание: Типы данных и структуры данных Python для DevOps
14 Задание: Типы данных и структуры данных Python для DevOps
проверить тип данных используемой переменной, мы можем просто написать: your_variable=100
2
1
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Прямо сейчас вы сбрасываете функцию, которая загружает строку и запускает ее. Таким образом, вы получаете дамп кода, который загружает строку и запускает ее. Ничего удивительного.

Если вы хотите сбросить какой-то другой код, вам нужно сбросить этот код:

local code, codeError = loadstring(arg[1])
if code == nil then
    print("Error:",codeError)
else
    Dumped = string.dump(code)
end

по-видимому, это просто возвращает nil в string.dump

Ivan 19.11.2022 03:16

@Ivan Я отредактировал ответ, чтобы вы могли увидеть, как получить сообщение об ошибке.

user253751 19.11.2022 05:30

Другие вопросы по теме