私は複数のプロセスにわたって共通のアドレススペースレイアウトを利用できる並列プログラムのためにランタイムシステムを開発しています。数千ノードにまたがる可能性があります。多くの場合、この環境向けに構築されたソフトウェアは、アドレス空間のランダム化がデフォルトで有効になっているLinuxシステム上で実行され、ユーザはシステム全体で無効にしたり無効にしたりすることはできません(sysctl -w kernel.randomize_va_space=0
など)。これは、並列プログラムにいくつかの制限を課し、パフォーマンスを低下させる可能性があります。したがって、私たちが構築するバイナリのためにそれを無効にする方法を理解したいと思います。このソフトウェアは常に管理された環境で動作しているため、セキュリティは問題ではありません。Linuxでバイナリのアドレス空間のランダム化を無効にするにはどうすればよいですか?
私はET_EXEC
、EF_AS_NO_RANDOM
(明らかに合併したことがない?)とPF_RANDOMIZE
のように、様々なフラグや変数への参照を見つけたが、私はこれらのフラグを設定するために何ができるかを説明し、任意のドキュメントを見つけることができません。理想的な答えは、コンパイラ/アセンブラ/リンカのフラグがバイナリのランダム化を無効にするか、これが動作するツールチェーン/カーネルのバージョンを教えてくれます。次善策は、バイナリをビルドした後も同じことをするツールです。
誰かがそれを提案してくれると確信しているので、実行時にsetarch -R
でこの変更を行うことができますが、これを実行可能ファイルに記録することをお勧めします。
paxctl -rx
のように見えますが、PaXパッチが含まれていないカーネルで使用されている現在の方法には当てはまらないようです。
私はこれを調査し、今試してみます。 – Novelocrat
働いたようです。ありがとう! – Novelocrat