gpt4 book ai didi

linux - 有没有办法在 linux x86_64 "high memory"中加载 a.out?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:09:22 24 4
gpt4 key购买 nike

如果我查看 Linux (x86_64) 上 64 位进程的内存映射,我发现 a.out 映射到相当低的内存中:

$ cat /proc/1160/maps
00400000-004dd000 r-xp 00000000 103:03 536876177 /usr/bin/bash
006dc000-006dd000 r--p 000dc000 103:03 536876177 /usr/bin/bash
006dd000-006e6000 rw-p 000dd000 103:03 536876177 /usr/bin/bash
006e6000-006ec000 rw-p 00000000 00:00 0
00e07000-00e6a000 rw-p 00000000 00:00 0 [heap]
7fbeac11c000-7fbeac128000 r-xp 00000000 103:03 1074688839 /usr/lib64/libnss_files-2.17.so
7fbeac128000-7fbeac327000 ---p 0000c000 103:03 1074688839 /usr/lib64/libnss_files-2.17.so

我想在内存的最低部分映射一个 2G 内存区域,但必须将其放在这些 a.out 映射之后的区域中,进入第二个 2G 区域。

这里的 a.out 是否被映射为 x86_64 ABI 的一部分,或者可以使用以下方法之一将该加载地址移动到不同的区域:

  • 运行时加载器标志
  • 链接器在创建可执行文件时标记

?

最佳答案

是的。将 Linux x86-64 应用程序构建为位置无关的可执行文件将导致它及其堆与 libc 和其他库一起映射到高端内存。这应该会留下 2GB 以下的空间供您免费使用。 (但是,请注意,内核可能会保护前 64KB 左右的内存不被映射,以保护它免受某些攻击;查找 vm.mmap_min_addr 以获取信息。)

要将您的应用程序构建为与位置无关的可执行文件,请将 -pie -fPIE 传递给编译器。

关于linux - 有没有办法在 linux x86_64 "high memory"中加载 a.out?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40183002/

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