C++ - 用户空间代码中受保护代码的第二级

C++ - second level of protected code in user space code

本文关键字:代码 二级 受保护 用户 空间 C++      更新时间:2023-10-16

给定此代码:

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];
}

我想在无法访问自身外部代码的module中执行run,用自己的私有内存空间隔离它,只能从主进程访问。 防止内存泄漏,并可能防止恶意代码。 代码不需要访问除其自己的内存之外的任何内容。 我打算让这段代码是跨平台的,为linux,windows,mac,android等编译和运行。

这是一个相当简单的问题;如何使用上面讨论的要求在 c++ 中运行沙盒/受保护的代码? 但我认为一个更复杂的答案。 一个我认为包含程序集。

我认为没有跨平台的解决方案可以将模块加载到同一进程中(此外,我们还没有跨平台模块)。

或多或少的可移植解决方案是创建另一个进程并使用跨进程通信。对于不同的操作系统,它们仍然不同,但跨平台包装器确实存在。

一个已知的实现是谷歌浏览器沙盒。在 Windows 上,它创建子进程,将其访问令牌减少到最低限度,并挂钩其文件 I/O 系统 API 以通过管道将数据转发到父进程。好的沙盒就是这么难...