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,以通过管道将数据转发到父进程。好的沙盒 很难...
鉴于此代码:
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,以通过管道将数据转发到父进程。好的沙盒 很难...