【问题标题】:Prevent dlopen'd library from overriding symbols防止 dlopen'd 库覆盖符号
【发布时间】:2017-05-11 20:33:56
【问题描述】:

我知道有一个 RTLD_LOCAL 标志可以防止已加载库中的符号进入全局范围。但问题是没有办法阻止加载的库使用 RTLD_GLOBAL 调用 dlopen,从而将符号插入全局范围。

有没有办法防止这种情况发生?

【问题讨论】:

    标签: shared-libraries dlopen


    【解决方案1】:

    但问题是没有办法阻止加载的库随后使用 RTLD_GLOBAL 调用 dlopen,从而将符号插入全局范围。

    在您的进程中运行代码的库 可以做一百万件事:它可能会破坏您的堆、修补您的可执行文本、覆盖您已解决但尚未解决的 GOT 条目、重定向您的打开文件描述符到不同的文件或套接字等。

    担心它可能会dlopen 有点毫无意义。如果您真的想将其与您的进程隔离,请在不同的进程中运行它。

    但如果出于某种原因您仅关心dlopen 而这个库无能为力,您可以找到该库的dlopen GOT 条目,并将其设置为my_dlopen ,它要么总是返回NULL,要么在调用真正的dlopen之前清除RTLD_GLOBAL位。

    【讨论】:

      猜你喜欢
      • 2014-04-19
      • 1970-01-01
      • 2015-05-28
      • 2018-06-27
      • 2019-12-03
      • 1970-01-01
      • 2019-03-11
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多