関数呼び出しなど、コードをどのように変更しますか?
2 に答える
PIEは、実行可能ファイルのアドレス空間配置のランダム化(ASLR)をサポートします。
PIEモードが作成される前は、プログラムの実行可能ファイルをメモリ内のランダムアドレスに配置することはできず、位置独立コード(PIC)ダイナミックライブラリのみをランダムオフセットに再配置できました。PICがダイナミックライブラリに対して行うのと非常によく似ていますが、違いは、プロシージャリンケージテーブル(PLT)が作成されず、代わりにPC相対再配置が使用されることです。
gcc /リンカーでPIEサポートを有効にした後、プログラムの本体がコンパイルされ、位置に依存しないコードとしてリンクされます。ダイナミックリンカは、ダイナミックライブラリと同様に、プログラムモジュールで完全な再配置処理を実行します。グローバルデータの使用はすべて、グローバルオフセットテーブル(GOT)を介したアクセスに変換され、GOTの再配置が追加されます。
PIEは、このOpenBSDPIEプレゼンテーションで詳しく説明されています。
機能の変更は、このスライドに示されています(PIEとPIC)。
x86 pic vs pie
ローカルグローバル変数と関数はパイで最適化されます
外部グローバル変数と関数はpicと同じです
このスライド(PIEと旧式のリンク)
x86パイvsフラグなし(修正済み)
ローカルグローバル変数と関数はfixedに似ています
外部グローバル変数と関数はpicと同じです
PIEはと互換性がない可能性があることに注意してください-static