Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
(Lua 5.1)如何将字符串转换为函数_Lua - Fatal编程技术网

(Lua 5.1)如何将字符串转换为函数

(Lua 5.1)如何将字符串转换为函数,lua,Lua,我正在创建一个隐藏的loadstring函数。我将字符串“loadstring”转换为字节(每个字符位于不同的变量中) 例如: local a = 'loadstring' ab = a:byte(1,1) ac = a:byte(2,2) ab = tonumber(ab) ac = tonumber(ac) 然后我对所有的变量做了一个tonumber() 例如: local a = 'loadstring' ab = a:byte(1,1) ac = a:byte(2,2) ab =

我正在创建一个隐藏的loadstring函数。我将字符串“loadstring”转换为字节(每个字符位于不同的变量中)

例如:

local a = 'loadstring'
ab = a:byte(1,1)
ac = a:byte(2,2)
ab = tonumber(ab)
ac = tonumber(ac)
然后我对所有的变量做了一个
tonumber()

例如:

local a = 'loadstring'
ab = a:byte(1,1)
ac = a:byte(2,2)
ab = tonumber(ab)
ac = tonumber(ac)
然后我将其放入另一个变量(所有单个变量)中,并存储为
string.char()
格式,如下所示:

例如:

ab = string.char(ab)
ac = string.char(ac)
-- Converting my string 'loadstring' to loadstring (string to function)
loadstring("print'test'")()
这是我能够成功完成的,但我注意到我不知道如何编译所有
string.char()
变量。我只能考虑使用
,我想得到的是,我想把这个字符串值变成一个可调用的函数,就像前面的
loadstring

例如:

ab = string.char(ab)
ac = string.char(ac)
-- Converting my string 'loadstring' to loadstring (string to function)
loadstring("print'test'")()
是的,如果有人能帮我,那就太好了

我的代码:

a = "108"
b = "111"
c = "97"
d = "100"
e = "115"
f = "116"
g = "114"
h = "105"
i = "110"
j = "103"

a = tonumber(a)
b = tonumber(b)
c = tonumber(c)
d = tonumber(d)
e = tonumber(e)
f = tonumber(f)
g = tonumber(g)
h = tonumber(h)
i = tonumber(i)
j = tonumber(j)

a = string.char(a)
b = string.char(b)
c = string.char(c)
d = string.char(d)
e = string.char(e)
f = string.char(f)
g = string.char(g)
h = string.char(h)
i = string.char(i)
j = string.char(j)

a = a..b..c..d..e..f..g..h..i..j

return a
您可以使用escape()和unescape()函数来隐藏函数名, 并将函数本身作为全局表的元素调用_G:

function escape (s)
      local s = string.gsub(s or '', '.', function (a)  return string.format("%%%02X", string.byte(a))   end)
      return s
 end

function unescape (s)
     local  s = string.gsub(s or '', "%%(%x%x)", function (x) return string.char(tonumber(x, 16)) end)
     return s
end

local  f = "loadstring"

print(escape(f))   -- %6C%6F%61%64%73%74%72%69%6E%67

-- using
local strcode = unescape("%6C%6F%61%64%73%74%72%69%6E%67")   -- "loadstring"
_G[strcode] ("print('test')")()   -- test

“隐藏的加载字符串函数”是什么意思?您是否正在尝试制作一个带有“后门”的沙盒,允许您加载字符串?@LuaTutoring:注意:这仍然要求
loadstring
可见且全局可访问。@Nicolas我能够使其可见,因此loadstring不可见。谢谢你的通知,我必须检查。@LuaTutoring:我很好奇:你是怎么做到的,而且还允许
\u G[“loadstring”]
工作?@LuaTutoring:对不起,我实际上看不懂。你能把它转换成易读的东西吗?重要的部分是从全局表中删除
loadstring
(从而阻止
loadstring(…)
工作),同时仍然允许
\u G[“loadstring”](…)
工作。@LuaTutoring:正如预期的那样,如果我将
loadstring(a)(
粘贴在那一块代码的末尾。。。它很好用。你什么都没有隐瞒。