从string.dump返回值中移除源块

我正在尝试制作一个闭源的 lua 文件,为此,我冒险做出这种决定,即没有正常思维的人会花费很长时间来转换(它是某种汇编形式)string.dump 返回的代码。

然而,string.dump 也返回了一个包含完整源代码的代码块。无论我做什么,都似乎无法制作自动化的源代码删除器,删除返回字符串中的源代码-它似乎没有按原样传递,我不知道它是否会删除我的缩进,换行符,空格,或者在某些条件下会删除某些内容。

所以基本上就是说; 假设我有

local a = string.dump(function() print("Hello world") end)

a 将是这样的:

LuaQ(源)(我想保留的使其工作的内容)

但我想删除源代码,但是即使我传入完全相同的源代码进行查找,string.find 也找不到它。

如果我有任何不清楚的地方,请说一声。

原文链接 https://stackoverflow.com/questions/7045478

点赞
stackoverflow用户726361
stackoverflow用户726361

请看 LuaC 的源代码。我认为您看到的只是调试信息,而 LuaC 有选择地将调试信息从生成的字节码中删除的选项。您可以看看它是如何做到的。

话虽如此,在您的程序的字节码中,字符串字面值始终会可见,因为 Lua 将它们作为纯文本存储在字节码中。

2011-08-12 19:43:38
stackoverflow用户107090
stackoverflow用户107090

在执行 a=string.dump(function() print("Hello world") end) 之后,a 并不包括 函数的源代码。尽管如此,它确实包含函数中的字符串。不过,你可能正在使用 loadstring,默认情况下它会将完整的字符串作为块的名称添加。尝试使用 loadstring(source,"=")

2011-08-13 01:16:31