我正在学习LD链接器脚本,并且我注意到,如果我将.text部分(或任何部分)链接到低于2MB的地址,我的进程一运行就会立即被Linux杀死。下面是我使用的一个示例脚本:
SECTIONS
{
. = 0x200000; /* base for text section */
.text : { *(.text) }
. = 0x800000;
.rodata : { *(.rodata) }
.data : { *(.data) }
.bss : { *(.bss) }
}如果我将文本基设置为0x1FFFFF或更低版本,则程序在运行时会立即被Linux杀死:
$ ./main
Killed0x200000很好。Linux是否为最低2MB的虚拟内存设置了某种类型的保护?
作为一个更普遍的问题,是否有关于在虚拟内存中哪些部分应该链接的规则,或者只要我没有踩到任何保留范围,那么任何地方都可以吗?
(显然,对于一个“真正的”程序,我只会使用默认的LD脚本,但我只是要求学习的目的)。
发布于 2015-06-13 22:22:14
Linux是否为最低2MB的虚拟内存设置了某种类型的保护?
是的;mmap_min_addr sysctl值防止进程映射低内存页以防止某些类型的内核攻击。
https://stackoverflow.com/questions/30823448
复制相似问题