加载共享对象的故障安全方式

时间:2016-05-09 18:31:46

标签: c glib

我正在使用GLib g_module函数在运行时加载一些共享对象。

我使用的基本方法如下:

  1. 致电g_module_open以获取模块
  2. 之后,请致电g_module_make_resident
  3. 使用g_module_symbol
  4. 加载符号

    由于我使用它作为添加插件兼容性的基本方法,我感兴趣的是,如果有一个好方法可以确保即使加载的模块有错误(如内存损坏(malloc / { {1}}))主要应用程序可以“抓住”#39;这个错误没有崩溃一切?

    我真的不想让你写任何代码,我只是感兴趣,如果有一个很好的方法来实现这个...

1 个答案:

答案 0 :(得分:2)

正如Severin所说,你真的无法做任何事情。也就是说,你有几个选择:

您可能想要考虑的第一件事是使用类似libpeas的东西,它允许您使用非C链接(JavaScript,Python等)加载语言插件。其中许多语言提供的安全性远远高于C,因此如果您尝试防范程序员错误(而不是恶意模块),这可能是一个很好的方法。

另一种相对简单的方法是在单独的进程中运行每个插件。您可以通过D-Bus,管道等进行通信。这种方法的一个优点是某些模块可以拥有较少的权限;如果您有一个与可能需要root权限的硬件交互的程序,但您的UI仍然可以作为非特权用户运行。心灵感应就是这种架构的一个例子。