Linux - 将部分链接到最低 2 MB 内存时进程终止?

Linux - process killed when linking section into lowest 2 MB of memory?

我正在学习 LD linker 脚本,我注意到如果我 link .text 部分(或任何部分)的地址小于 2 MB,我的进程我一 运行 它就立即被 Linux 杀死。这是我正在使用的示例脚本:

SECTIONS
{
    . = 0x200000;    /* base for text section */
    .text : { *(.text) }
    . = 0x800000;
    .rodata : { *(.rodata) }
    .data : { *(.data) }
    .bss : { *(.bss) }
}

如果我将文本基数设置为 0x1FFFFF 或以下,当我 运行 时程序立即被 Linux 杀死:

$ ./main
Killed

0x200000 工作正常。 Linux 是否为最低 2 MB 的虚拟内存提供某种类型的保护?

作为一个更一般的问题,是否有关于 的任何规则 部分应该 linked 在虚拟内存中,或者只要我不在任何地方通常都可以是否踏入任何保留范围?

(显然,对于 "real" 程序,我只使用默认的 LD 脚本,但我只是出于学习目的询问)。

Does Linux have some type of protection or something in place for the lowest 2 MB of virtual memory?

是; mmap_min_addr sysctl 值阻止进程映射低内存页面以防止某些类型的内核攻击。