2011-04-13 60 views
0

我有一个程序和大量的“插件”(共享库),主程序在运行时请求加载。在动态加载之前检查共享库的兼容性

插件可以访问程序的所有内部全局数据结构/函数,因此每次更改内部数据结构时都没有选择保留版本的选项。

我正在寻找一种方式,即主程序可以检查它尝试加载的插件是否受支持(使用适当的数据结构)。

有没有一种创造性的方式可以想到,这样做?

+0

从库中导出getVersion函数 - 加载,调用它,根据此版本确定兼容性。 – Erik 2011-04-13 13:05:43

回答

2

已经在插件函数返回有关协议的支持的版本信息(插件的协议并不局限于它所提供的,这也是取之于调用程序必需的。)

0

AProgrammer的答案(或简单地使用版本号导出全局变量)可以正常工作,但请记住,没有任何解决方案对于恶意插件文件是万无一失或安全的。加载模块与程序运行在相同的内存空间中,具有相同的权限,不幸的是动态加载器会在插件中快速运行全局构造函数,然后才能查询版本或自己执行任何检查。 (人有一个链接到全球构造函数是有害的?)

在任何情况下,如果插件架构是你的设计,我会强烈建议你禁止了插件,规范使用任何全球构造函数。当然,你无法在运行时强制执行此操作,但至少可以指责任何因违反合同而破坏事件的插件作者。

+1

如果您想防范恶意用户提供的代码,您需要在虚拟机中运行该代码。 – AProgrammer 2011-04-13 13:18:47