c - 有没有办法将 Linux 共享库加载到特定的内存位置?

标签 c linux elf dlopen

我有一个 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/

相关文章:

python - 将我的 PyGtk 3 应用程序移植到 Win32

c++ - 从共享对象调用主可执行文件中的函数

c - `dlopen` 从同一 DSO 内部访问 DSO

c - C 中 getch() 的问题

c - 如何在Windows(或Windows)等操作系统上测量时间片的长度?

linux - 如何检测系统是否在 UNIX shell 脚本中启用了 IPv6?

C中复杂的变量赋值(反编译的ELF)

C - 自定义类型中的默认值

c - 在字符串 c 中的单词之间添加空格

linux - 在linux中,用户空间程序如何使用内核函数?我真的需要一些灵感