'cat /proc/self/maps' 返回的地址为什么以及如何在再次执行时发生变化

why and how do the addresses returned by 'cat /proc/self/maps' change when it's executed again

我正在尝试了解 linux 内存管理。

为什么 'cat /proc/self/maps' 返回的地址在再次执行时发生变化

user@notebook:/$ cat /proc/self/maps | grep heap

55dc94a7c000-55dc94a9d000 rw-p 00000000 00:00 0 [heap]

user@notebook:/$ cat /proc/self/maps | grep heap

562609879000-56260989a000 rw-p 00000000 00:00 0 [heap]

这是由于地址 Space 布局随机化,又名 ASLR。 Linux 每次都会在不同的位置加载代码和库,以使其更难利用缓冲区溢出等。

您可以使用

禁用它
echo 0 > /proc/sys/kernel/randomize_va_space

这将使地址每次都相同。然后您可以重新启用它:

echo 2 > /proc/sys/kernel/randomize_va_space

地址将再次随机化。