Linux - 将段连接到最低2 MB的内存时,进程被终止?

时间:2015-06-13 20:56:01

标签: linux linker ld virtual-memory linker-scripts

我正在学习LD链接器脚本,我注意到如果我将.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的虚拟内存?

作为一个更普遍的问题,是否有任何关于哪些部分应该在虚拟内存中链接的规则,或者只要我不踩任何保留范围就可以在任何地方使用?

(显然对于#34;真正的"程序我只使用默认的LD脚本,但我只是要求学习目的。)

1 个答案:

答案 0 :(得分:2)

  

Linux是否具有某种类型的保护或适用于最低2 MB虚拟内存的东西?

是; mmap_min_addr sysctl值可防止进程映射低内存页以防止某些类型的内核漏洞利用。