gpt4 book ai didi

linux - 如何从 Linux 进程中保留特定范围的虚拟内存

转载 作者:太空狗 更新时间:2023-10-29 12:28:20 25 4
gpt4 key购买 nike

i86-32位系统:有没有办法在进程内存映射中保留特定范围的虚拟地址空间,以阻止 ld.so(动态链接器)将任何共享对象加载到该范围?

我想至少用2个1G的虚拟内存来映射两个1G的大页,但是ld.so加载了中间的共享库,所以无法映射1G的大页。

编译器无法完成这项工作。链接器脚本也不能。 ld.so 由加载程序加载到可执行文件中,然后 ld.so 加载其他共享库。然而,ld.so 本身甚至在映射空间的中间。

ld.so 和 libc.so 的入口点位于更高的地址,我们的应用程序无法更改。 入口点地址:0x46c38810

谢谢,江涛

最佳答案

ld.so is loaded into the executable by the loader,

不是:ld.so 加载器,由内核加载到进程中。

您确实有几个选择:

  • 最简单的解决方案是完全静态地链接二进制文件。请注意,在 Linux 上,这样的二进制文件仍然可以 dlopen 其他共享库,尽管这不是一个得到很好支持或经过良好测试的事情。
  • 更难的解决方案是构建您自己的补丁 ld.so,并让您的应用程序使用该 ld.so(使用 -Wl,--dynamic- linker=... 标志)。
  • 如果你不想这样做,rtldi可能会有所帮助(它将在之前 ld.so 运行)。

关于linux - 如何从 Linux 进程中保留特定范围的虚拟内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34957774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com