Linux
在我的程序中禁用隨機記憶體地址生成
我正在閱讀“剝削的藝術”,並想嘗試一些實驗,包括讀取和寫入各種記憶體地址。我創建了一些簡單的程序並嘗試通過各種 hack 覆蓋它們的變數,問題是每次執行程序時這些變數的地址都會不斷變化,這使得這一切變得非常複雜。
我知道這是出於安全原因,但我想知道是否可以出於學習目的禁用它。這是我的系統和 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:~$
如果我沒記錯的話,應該可以通過 proc 文件系統禁用地址空間隨機化:
迴聲 0 > /proc/sys/kernel/randomize_va_space
顯然,您必須為此紮根。
臨時更改設置的另一個選項是通過 sysctl 命令。
sysctl -w kernel.randomize_va_space=0
要在系統重新啟動後使此設置永久有效,請將選項添加到
/etc/sysctl.conf
. 預設值應為 2 以獲得最安全