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

标签 c glib

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

我使用的基本方法如下:

  1. 调用g_module_open获取模块
  2. 之后调用g_module_make_resident
  3. 使用g_module_symbol加载符号

因为我使用它作为添加插件兼容性的基本方法,我很感兴趣是否有一种好的方法来确保即使加载的模块有错误(比如内存损坏(malloc/free)) 主应用程序可以在不崩溃的情况下“捕获”这个错误吗?

我真的不想让你写任何代码,我只是想知道有没有好的方法来实现这个……

最佳答案

正如 Severin 所提到的,实际上没有任何事情可以轻松完成。也就是说,您确实有几个选择:

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

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

关于c - 加载共享对象的故障安全方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37122978/

相关文章:

c++ - 如何使用 va_list 解决错误?

c - Readdir/closedir - Valgrind 显示 "invalid read"

c - 坚持退出 C 中的循环

gcc - glib 版本不是所需的最低版本

python - Ubuntu 中的 Secret.Service 超时

mysql - 通过SSH连接mysql错误2002

c - 将数组的值存储在一个变量中

C CSV GLOB排序优化

c++ - GLib 正则表达式匹配给出特定匹配和模式的段错误

linux - 安装 gtk 和 glib