【发布时间】:2017-05-11 20:33:56
【问题描述】:
我知道有一个 RTLD_LOCAL 标志可以防止已加载库中的符号进入全局范围。但问题是没有办法阻止加载的库使用 RTLD_GLOBAL 调用 dlopen,从而将符号插入全局范围。
有没有办法防止这种情况发生?
【问题讨论】:
我知道有一个 RTLD_LOCAL 标志可以防止已加载库中的符号进入全局范围。但问题是没有办法阻止加载的库使用 RTLD_GLOBAL 调用 dlopen,从而将符号插入全局范围。
有没有办法防止这种情况发生?
【问题讨论】:
但问题是没有办法阻止加载的库随后使用 RTLD_GLOBAL 调用 dlopen,从而将符号插入全局范围。
在您的进程中运行代码的库 可以做一百万件事:它可能会破坏您的堆、修补您的可执行文本、覆盖您已解决但尚未解决的 GOT 条目、重定向您的打开文件描述符到不同的文件或套接字等。
担心它可能会dlopen 有点毫无意义。如果您真的想将其与您的进程隔离,请在不同的进程中运行它。
但如果出于某种原因您仅关心dlopen 而这个库无能为力,您可以找到该库的dlopen GOT 条目,并将其设置为my_dlopen ,它要么总是返回NULL,要么在调用真正的dlopen之前清除RTLD_GLOBAL位。
【讨论】: