位置独立コードをスタティック ライブラリに配置するとどうなりますか? (特に、x86-64 では)
つまり、いくつかの.oファイルが PIC で生成され、.aファイルに配置されます。これ.aは、通常どおり最終的な実行可能ファイルに静的にリンクされます。
動作しているように見えますが、これを行う意味はありますか? なんで?
最終的なアドレス計算は何をしますか? (リンク時? 実行時?)
ありがとうございました
位置独立コードをスタティック ライブラリに配置するとどうなりますか? (特に、x86-64 では)
つまり、いくつかの.oファイルが PIC で生成され、.aファイルに配置されます。これ.aは、通常どおり最終的な実行可能ファイルに静的にリンクされます。
動作しているように見えますが、これを行う意味はありますか? なんで?
最終的なアドレス計算は何をしますか? (リンク時? 実行時?)
ありがとうございました
PIC システムの IIRC では、すべてのグローバル変数が PIC を介してアクセスされます。
PIC の全体的な考え方は、コード内のすべてのグローバル アクセスではなく、単一のテーブル (GOT) のみを調整する必要があるということです。
コード自体は、GOT を介してアクセスするため、位置に依存しません。GOT の位置 (命令のアドレスを基準とする) は、最終的なリンク時にエンコードされます。
なのでミックスです。一部は最終リンク中に行われ (GOT オフセットのコーディング)、一部は起動時に行われ (GOT の再配置/修正)、一部は行われません (コードの再配置)。