我知道RTLD_LOCAL标志会阻止加载库中的符号进入全局范围。但问题是没有办法阻止加载的库随后使用RTLD_GLOBAL调用dlopen,从而将符号插入全局范围。
有没有办法防止这种情况发生?
答案 0 :(得分:1)
但问题是没有办法阻止加载的库随后使用RTLD_GLOBAL调用dlopen,从而将符号插入全局范围。
在您的进程中运行代码的库可以做一百万件事:它可能损坏您的堆,修补您的可执行文本,覆盖已经解析但尚未解析的GOT
条目,将打开的文件描述符重定向到不同的文件或套接字等等。
担心它可能dlopen
有点毫无意义。如果您真的想将它与流程隔离,请在不同的流程中运行它。
但如果出于某些原因,只关心dlopen
并且此库无法做任何其他事情,您可以找到该库dlopen
{{1}输入,并将其设置为GOT
,它始终返回my_dlopen
,或者在调用真实NULL
之前清除RTLD_GLOBAL
位。