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

问题描述 投票:0回答:1

鉴于此代码:

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 ++中运行带有上述要求的沙盒/受保护代码?但我会假设一个更复杂的回答。我认为是包含装配的一个。

c++ assembly sandbox
1个回答
1
投票

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

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

一种已知的实施方案是Google Chrome沙箱。在Windows上,它创建子流程,将访问权限减少到最小,并挂钩其文件i / o系统API,以便通过管道将数据转发到父流程。好沙箱很难......

© www.soinside.com 2019 - 2024. All rights reserved.