在沙箱中运行插件

2024-03-26

我正在设计一个 C/C++ 系统,可以使用各种插件进行扩展。有一个定义良好的 C 公共 API,主要适用于(const) char*和其他指针类型。插件被编译成 .so 或 .dll 文件,主应用程序在启动时加载它们,然后根据请求卸载或重新加载它们。

这些插件可能来自各种来源,可信或不可信:)

现在,我想确保,如果一个插件做了一些愚蠢的事情(例如尝试释放他不应该释放的内存),此操作不会导致整个系统崩溃,而只是注意到主系统有关行为不当的插件,以便将其从队列中删除。

代码调用按以下方式完成:

const char* data = get_my_data();
for(int i = 0; i<plugins; i++)
{
   plugins[i]->execute(data);
}

but if plugin[0]“意外”释放数据字符串或覆盖它,或者错误地跳转到地址 0x0 这会导致整个系统崩溃,我不希望这样。怎样才能避免这样的灾难呢? (我知道,我可以复制data字符串...这并不能解决我的问题:))


为插件创建一个包装进程,并通过 IPC 与该包装进程进行通信。 如果插件失败,您的主进程将保持不变

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在沙箱中运行插件 的相关文章

随机推荐