120

関数呼び出しなど、コードをどのように変更しますか?

4

2 に答える 2

131

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

于 2011-02-17T14:53:58.253 に答える