コードをPIEとしてコンパイルすることで、コード、データ/スタック/ヒープをランダム化できることがわかっています。コードとデータには、読み込みごとに常に固定オフセットがあります。
いくつかのコンパイル/リンク フラグを追加して、コード/データ オフセットをランダムな値に設定する方法はありますか?
ASLR ランダム化アルゴリズムは常にページ境界に丸められるため、読み込み時にこれを変更する実際的な機能はありません。
コンパイル時にアドレスを調整したい場合は、関数のアドレス配置を変更してみてください (例: を使用-falign-functions=...
)。ただし、トランポリンの場所として使用できるウィンドウをコードに残すことになります。
これらのオフセットは ELF セクション データで定義されているため、オフセットを変更するには、リンク スクリプトを変更するなどして、リンカーに到達する前にこれらの値を変更する必要があります。
-Wl,-verbose を渡すと、バイナリの生成に使用されるリンカー スクリプトのダンプが取得され、そのスクリプトを調整できますpie
。通常のバイナリではなくファイルをコンパイルする場合は異なります。
セグメントのオフセットを変更できる便利なフラグは知りません。この-Ttext
オプションを使用すると、コード セグメントの ASLR が無効になります。これは、目的とは正反対です。
リンクされた論文は、これを実行するためのツールをそれほど困難なく作成できることを示しているようです。
コメントするには長すぎます。おそらく、あなたが探している答えではないでしょう。