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 值阻止进程映射低内存页面以防止某些类型的内核攻击。
我正在学习 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 值阻止进程映射低内存页面以防止某些类型的内核攻击。