我想打开一个共享对象作为数据文件并对其执行验证检查。验证是签名检查,我签署共享对象。如果验证成功,我想将当前打开的共享对象作为适当的共享对象加载。用文件描述符调用dlopen?
第一个问题:是否可以在签名检查期间调用dlopen
并加载共享对象作为数据文件,以便代码不是执行?根据手册页,我不这么认为,因为我没有看到类似于RTLD_DATA
的旗帜。
由于我将共享对象作为数据文件打开,因此我有描述符可用。验证成功后,我想将描述符传递给dlopen
,以便动态加载器正确加载共享对象。我不想关闭文件,然后通过dlopen
重新打开它,因为它可能引入竞争条件(文件验证不是打开和执行相同的文件)。
第二个问题:如何使用文件描述符将打开的文件传递到dlopen
,以便dlopen
执行共享对象的习惯初始化?
即使我回答了一些问题,我也不确定要理解你的问题。你真的应该更多地解释你的动机。你为什么要这么做?你在想什么样的软件?显示一些用例情景。 – 2013-04-24 05:44:48
你确实**没有定义你的“批准”或“真实”的概念。你可以有一些独立的方式来存储其他地方的“好”插件的哈希(例如数据库,配置文件),并在'dlopen'之前检查插件的哈希码。仍然可能没有办法做到防错。否则,你也可以自己生成插件的C代码,在C代中进行任何你想要的检查,然后编译它并'dlopen'。FWIW [GCC MELT](http://gcc-melt.org/)正在这样做。 – 2013-04-24 05:57:57
请编辑您的问题以改进它。 – 2013-04-24 17:03:16