防止dlopen&#ddpen库覆盖符号

时间:2017-05-11 20:33:57

标签: shared-libraries dlopen

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

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

1 个答案:

答案 0 :(得分:1)

  

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

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

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

但如果出于某些原因,关心dlopen并且此库无法做任何其他事情,您可以找到该库dlopen {{1}输入,并将其设置为GOT,它始终返回my_dlopen,或者在调用真实NULL之前清除RTLD_GLOBAL位。