共有ライブラリファイルのアドレスは仮想アドレスですか、それとも再配置可能なアドレスですか?
答えは、共有ライブラリファイルがGCCの-fPICオプションを使用して構築されたかどうかによって異なりますか?
ベストアンサー1
プロセスは仮想アドレス空間を取得します。 ELFファイルは、共有オブジェクトを含む仮想アドレス空間の一部がロードされる仮想アドレスを指定します。これは仮想アドレスになります。
セクションには、ロード時間の再配置中に変更される位置依存アドレスを指す再配置テーブルがあります。これにはいくつかの理由がありますが、セクションのすべてのアドレスをターゲットのRelocatableセクションに再配置できる場合は可能です。 ELF を生成する再配置可能ファイルです。 ELFは、実行可能オブジェクトまたは共有オブジェクトを作成するための入力として使用できます。
共有ライブラリは、ELF共有オブジェクトの上位層としてオペレーティングシステムがロードされるときの動的リンカの機能です。プロセスの仮想メモリ空間に再配置されたアドレスを再マップします。したがって、共有ライブラリには、再配置可能なセグメントと仮想アドレスの両方があります。再配置可能アドレスを呼び出すことは、実際にアドレスを再配置可能にするコードセグメントと関連する再配置テーブルであるため、誤解を招く可能性があります。
GCC -fPIC
位置に依存しないコードを生成して再配置する必要はありません。機能的には、ELF再配置可能ファイルには場所依存または独立したコードを含めることができます。