
.soに必要なベースアドレスが空でない場合、ロードに失敗した場合、または動的ローダが再配置を実行した場合はどうなりますか?
答え1
どのプラットフォームについて問い合わせているのかはわかりません(たとえば、LinuxとWindowsの両方が共有ライブラリとASLRを持っており、好みのアドレスに関連するいくつかの同様の問題があるため)、Linuxと仮定します。
-fPIC
すべての.soファイルはASLRが可能で、アドレス0に基づいてコンパイルする必要があります。しかし、すべての.soはそうすることができます。フリーリンクシステム管理者が設定した場合、ローダーは固定アドレスから.soをロードしようとし、ASLRを無効にします。これが真であることを確認できます。
$ readelf -SW path/to/lib.so | grep prelink
事前リンクされたアドレスがすでに使用されている場合、ローダーはライブラリを別のアドレスに再配置します。
Windows DLLには、次のような機能があります。優先アドレス以前のバージョンではデフォルトで有効になっていましたが、私が知っている限りはもう有効になりません。