我正在学习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脚本,但我只是要求学习目的。)
答案 0 :(得分:2)
Linux是否具有某种类型的保护或适用于最低2 MB虚拟内存的东西?
是; mmap_min_addr
sysctl值可防止进程映射低内存页以防止某些类型的内核漏洞利用。