【发布时间】:2021-01-06 10:41:32
【问题描述】:
我一直在研究 x86-64 汇编和程序的内存布局。
我遇到了一个程序的虚拟地址空间示例,其中较低部分 (0x00000000-0x00010000) 被标记为保留。但我找不到对此的解释。
我有两个问题
- 为什么要保留这部分。我真的不能从我的程序中访问它吗?这个较低的部分被算作用户空间内存。所以我不明白为什么我无法使用它
- 这个保留部分是做什么用的?
【问题讨论】:
-
前 64 kB 被保留,因此取消引用空指针或从空指针派生的指针可能会导致程序崩溃。
-
在linux上你可以通过
/proc/sys/vm/mmap_min_addr调整它。 -
@fuz:由 Linux 内核保留,而不是 x86-64 ISA。 wiki.debian.org/mmap_min_addr 指出 WINE 可能需要将该范围用于 16 位 Windows 二进制文件。
标签: assembly x86-64 virtual-address-space