我正在阅读“开发的艺术”,并想尝试一些实验,包括读取和写入各种内存地址。我创建了一些简单的程序,并尝试通过各种技巧覆盖它们的变量,问题是这些变量的地址在每次运行程序时不断变化,使这一切变得极其复杂。
我知道这是出于安全原因,但我想知道是否可以出于学习目的禁用它。这是我的系统和 gcc 的信息:
blackbear@blackbear-laptop:~$ uname -a
Linux blackbear-laptop 2.6.32-30-generic #59-Ubuntu SMP Tue Mar 1 21:30:21 UTC 2011 i686 GNU/Linux
blackbear@blackbear-laptop:~$ gcc --version
gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Copyright (C) 2009 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
blackbear@blackbear-laptop:~$
答案1
如果我没记错的话,应该可以通过 proc 文件系统禁用地址空间随机化:
echo 0 > /proc/sys/kernel/randomize_va_space
显然,你必须对此有根有据。
答案2
临时更改设置的另一个选项是通过 sysctl 命令。
sysctl -w kernel.randomize_va_space=0
要使此设置在系统重新引导后永久且有效,请将该选项添加到/etc/sysctl.conf
。默认值应该是 2 最安全