【发布时间】:2013-04-03 12:00:04
【问题描述】:
我正在用 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]“意外”释放数据字符串或覆盖它或错误地跳转到地址 0x0,这将导致整个系统崩溃,我不希望这样。我怎样才能避免这种灾难。 (我知道,我可以复制data 字符串...这并不能解决我的问题:))
【问题讨论】:
-
我的回答是否帮助您解决了这个问题?如果是,请接受它作为正确答案。