私は、複数のプロセスにまたがる共通のアドレス空間レイアウトを利用できる並列プログラムのランタイムシステムに取り組んでおり、潜在的には複数の(数千の)ノードに分散しています。sysctl -w kernel.randomize_va_space=0
多くの場合、この環境用に構築されたソフトウェアは、デフォルトでアドレス空間のランダム化が有効になっているLinuxシステムで実行され、ユーザーはシステム全体(経由など)でアドレス空間のランダム化を無効にしたくない、または無効にできない場合があります。これにより、並列プログラムにいくつかの制限が課せられ、パフォーマンスが低下する可能性があります。したがって、構築するバイナリに対してそれを無効にする方法を理解したいと思います。このソフトウェアは常に制御された環境で実行されているため、セキュリティは問題ではありません。
ET_EXEC
、EF_AS_NO_RANDOM
(どうやらマージされたことがない?)やなどのさまざまなフラグや変数への参照を見つけましたがPF_RANDOMIZE
、これらのフラグを設定するために何ができるかを説明するドキュメントが見つかりません。理想的な答えは、どのコンパイラ/アセンブラ/リンカーフラグが結果のバイナリのランダム化を無効にするか、そしてこれが機能するツールチェーン/カーネルのバージョンを教えてくれるでしょう。次善の策は、バイナリが構築された後に同じことを行うツールです。
誰かがそれを提案すると確信しているので、実行時にこの変更を行うことができることはすでに知っていますがsetarch -R
、これを実行可能ファイルに記録することをお勧めします。
トリックを実行する必要があるようにpaxctl -rx
見えますが、PaXパッチを含まないカーネルで使用されている現在の方法には適用されないようです。