有没有一种方法可以重定向io.open以从lua中的自定义函数加载文件?

时间:2019-04-08 03:20:04

标签: lua

我正在使用Lua嵌入式。就我而言,我想从内存文件系统中的假文件(基于.zip文件)而不是真实文件系统中加载文件。

要完成此操作,我想我需要将所有内部fopen调用重定向/覆盖到仅在.zip文件内部显示的内容。这似乎不可能。是吗?

How can I create a secure Lua sandbox?

这是一个简单的例子:

此代码将打开一个文本文件,并将内容读入局部变量。在内部,它似乎使用fopen(),这意味着它将仅使用真实的文件系统。

local f = io.open('filename.txt')
local t = f:read("*all")
f:close()

相反,我希望它在内部调用我的“假”文件系统,然后从假文件系统返回文件的内容。

我已经能够完成仅加载.lua文件的操作。通过添加自定义搜索器/加载器(从.zip文件加载文件)来实现这一目的。现在,require("something.lua")仅从伪造的文件系统加载,这是完美的。

但是,load()dofile()loadfile()仍然可以使用fopen()。我目前正在淘汰它们,直到找到更好的解决方案为止。

load = nil
dofile = nil
loadfile = nil

在某种程度上,我认为我真的想将所有文件系统调用重定向到其他地方。

无论如何,我缩小了这个SO问题的范围,仅询问io.open。我是否应该用自己的替换/重定向lua中的io.open,以便从我的伪造文件系统中加载它。我想扩展一下,然后我可以重新定义io名称空间吗?

0 个答案:

没有答案