我正在開發可用於並行程序的運行時系統,可以利用跨多個進程的公共地址空間佈局,可能遍佈數千個節點。很多時候,爲這種環境構建的軟件在默認情況下啓用了地址空間隨機化的Linux系統上運行,用戶可能不希望或者不能在系統範圍內禁用它(通過sysctl -w kernel.randomize_va_space=0
等)。這對並行程序施加了一些限制,並且可能會損害性能。因此,我們想弄清楚如何爲我們構建的二進制文件禁用它。安全性不是問題,因爲此軟件始終在受控環境中運行。如何在Linux上禁用二進制的地址空間隨機化?
我發現各種標誌和變量,像ET_EXEC
,EF_AS_NO_RANDOM
(顯然並沒有合併?)和PF_RANDOMIZE
,但我不能找到描述我能做些什麼來設置這些標誌的任何文件的引用。一個理想的答案會告訴我什麼編譯器/彙編器/鏈接器標誌將禁用所產生的二進制文件的隨機化,以及這個工具鏈/內核的工作版本是什麼。接下來最好的工具是在二進制文件生成後執行相同的工作。
由於我確定有人會提出這個建議,我已經意識到我們可以在運行時用setarch -R
進行此更改,但最好將它記錄在可執行文件中。
它看起來像paxctl -rx
應該做的伎倆,但它似乎並不適用於內核中使用的當前方法,不包括PaX修補程序。
我會調查並嘗試這個。 – Novelocrat
似乎已經工作。謝謝! – Novelocrat