我正在用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);
}
但如果plugin[0]
的FreeS“意外”的数据字符串或覆盖,或错误地跳转到地址0x0这会搞垮整个系统,我不想要这个。我怎样才能避免这种灾难。 (我知道,我可以复制data
字符串......这并不能解决我的问题:))
我的回答有助于你解决这个问题吗?如果是这样,请接受它作为正确答案。 –