共有オブジェクト(.so)でASLRが有効になっているかどうかはどうすればわかりますか?

共有オブジェクト(.so)でASLRが有効になっているかどうかはどうすればわかりますか?

.soに必要なベースアドレスが空でない場合、ロードに失敗した場合、または動的ローダが再配置を実行した場合はどうなりますか?

ベストアンサー1

どのプラットフォームについて問い合わせているのかはわかりません(たとえば、LinuxとWindowsの両方が共有ライブラリとASLRを持っており、好みのアドレスに関連するいくつかの同様の問題があるため)、Linuxと仮定します。

-fPICすべての.soファイルはASLRが可能で、アドレス0に基づいてコンパイルする必要があります。しかし、すべての.soはそうすることができます。フリーリンクシステム管理者が設定した場合、ローダーは固定アドレスから.soをロードしようとし、ASLRを無効にします。これが真であることを確認できます。

$ readelf -SW path/to/lib.so | grep prelink

事前リンクされたアドレスがすでに使用されている場合、ローダーはライブラリを別のアドレスに再配置します。

Windows DLLには、次のような機能があります。優先アドレス以前のバージョンではデフォルトで有効になっていましたが、私が知っている限りはもう有効になりません。

おすすめ記事