鉴于此代码:
class module {
public:
virtual void run(void (*callback)(int)) = 0;
byte* memory;
}
int main() {
module m1 = loadSomeUntrustedModule();
module m2 = loadSomeUntrustedModule();
m1.memory[31] = 5;
//m1.run(); //?
return m1.memory[32];
}
我想在run
中执行module
,它无法访问自身之外的代码,将其与自己的私有内存空间隔离,只能从主进程访问。保护内存泄漏,并可能来自恶意代码。除了自己的内存之外,代码不需要访问任何内容。我打算让这个代码跨平台,编译和运行linux,windows,mac,android等...
这是一个相当简单的问题;如何在c ++中运行带有上述要求的沙盒/受保护代码?但我会假设一个更复杂的回答。我认为是包含装配的一个。
我认为没有可用于将模块加载到同一进程的跨平台解决方案(此外,我们还没有跨平台模块)。
或多或少的便携式解决方案是创建另一个流程并使用跨进程通信。对于不同的操作系统,它们仍然不同,但确实存在跨平台包装器。
一种已知的实施方案是Google Chrome沙箱。在Windows上,它创建子流程,将访问权限减少到最小,并挂钩其文件i / o系统API,以便通过管道将数据转发到父流程。好沙箱很难......