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