私は現在、いくつかのレガシーパッケージに取り組んでおり、一部Makefile
の s が-fPIC
フラグを使用して最終的な実行可能ファイルをコンパイルしていることがわかります。
私の理解では、これは共有ライブラリを作成するときに使用され、実行可能ファイルを作成するときに使用しても意味がありません。
インターネットで検索すると、実行可能ファイルではなく共有ライブラリに関する結果しか得られないため、私が正しいのか、それとも何かが欠けているのだろうかと思います。
ありがとう、
位置に依存しないコードは、共有ライブラリ コンテキストの外で役立つ場合があります。一般的なケースの 1 つはアドレス スペース レイアウトのランダム化です。これにより、最終的な実行可能ファイルがコード インジェクション攻撃に対してより安全になります。
Fedoraなどのいくつかのディストリビューションでは、ほとんどのパッケージが PIE としてビルドされています。
これは、ASRL のおかげでセキュリティの向上につながる、位置に依存しない実行可能ファイルの構築に使用される可能性があります。ただし、代わりに and を使用する必要があり-fpie
ます-pie
。
cc -c -fpie foo.c -o foo.o
cc -pie foo.o -o foo