我有一个 Linux 应用程序,它在运行时加载非常小的(一些小函数)共享库。由于各种重要原因™,我需要将共享库加载到某个虚拟内存范围内。但是,dlopen()
没有提供任何方法(我可以看到)来告诉它或提示它把它加载的内容放在哪里。
有没有办法告诉 dlopen()
应该把它加载的库放在哪里?
是否有替代 dlopen()
的方法来提供该功能?
最佳答案
我认为如果您愿意修改库,预链接程序实际上可能会展示一种执行此操作的方法。目标是修改库,使其具有首选地址。 prelink 的目的是为了提高性能,但我怀疑可以对其进行修改以适用于您的用例。 请注意,您永远无法保证在一般情况下会发生这种情况,但在受控情况下您可以保证会发生这种情况。 当然,检查 prelink 可以让您了解 elf 所涉及的部分,并对它是否可能做出更明智的决定。 http://en.wikipedia.org/wiki/Prelink# 或查看 http://packages.qa.debian.org/prelink Debian 中的源代码。
关于c - 有没有办法将 Linux 共享库加载到特定的内存位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25919859/