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

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

鉴于此代码:

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,将其与自己的私有内存隔离 space,只能从主进程访问。免受内存泄漏,并可能免受恶意代码的侵害。代码不需要访问任何东西,只需要访问它自己的内存。我打算让这段代码是跨平台的,为 linux、windows、mac、android 等编译和 运行ning...

这是一个相当简单的问题;我如何 运行 sandboxed/protected 在 c++ 中编写符合上述要求的代码?但我想回答起来要复杂得多。我假设包含程序集的一个。

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

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

一个已知的实现是 Google Chrome 沙箱。在 Windows 上,它创建子进程,将它们的访问令牌减少到最低限度,并挂钩它们的文件 i/o 系统 API,以通过管道将数据转发到父进程。好的沙盒 很难...