Tag: 沙箱

在沙箱中运行插件

我正在设计一个C / C ++系统,它可以通过各种插件进行扩展。 有一个定义良好的C公共API,它主要使用(const) char*和其他指针类型。 插件被编译成.so或.dll文件,主应用程序在启动时加载它们,然后根据请求卸载或重新加载它们。 插件可能来自各种来源,可靠或不可信:) 现在,我想确保,如果一个插件做了一些愚蠢的事情(比如尝试释放他本不应该释放的内存),这个动作并没有打倒整个系统,而只是注意到主系统它的行为不端插件,以便从队列中删除它。 代码调用以下列方式完成: const char* data = get_my_data(); for(int i = 0; iexecute(data); } 但如果plugin[0] “意外”释放数据字符串或覆盖它或错误地跳转到地址0x0这将导致整个系统崩溃,我不希望这样。 我怎样才能避免这种灾难。 (我知道,我可以复制data字符串……这不能解决我的问题:))