2016-04-11 17 views
2

現在、いくつかのレガシーパッケージを扱っていますが、Makefileの一部は-fPICフラグを使用して最終実行ファイルをコンパイルしています。"-fPIC"フラグ(共有ライブラリなし)で実行可能なコンパイル

これは共有ライブラリを作成するときに使用され、実行可能ファイルを作成するときにはこのライブラリを使用する意味がないことを理解しています。

私はインターネット上で検索すると、実行可能ファイルではなく共有ライブラリについての結果しか得られないため、何かが欠落していると思います。

おかげで、

+0

可能性のある理由については、Wikipediaを確認してください:https://en.wikipedia.org/wiki/Position-independent_code – hek2mgl

答えて

2

位置独立コードは、共有ライブラリのコンテキストの外側に役立ちます。 1つの一般的なケースはAddress space layout randomizationであり、最終的な実行ファイルをコードインジェクション攻撃に対してより安全にします。

Fedoraなどのいくつかのディストリビューションでは、ほとんどのパッケージがPIEとしてビルドされています。

+0

ありがとう!それは非常に興味深いですが、私が見ているアプリケーションのメイクファイルは実際にはそれほど敏感ではありません(小さなテストアプリケーション)ので、私は彼らが間違ってそのフラグを追加したと思います:)(例えばコピー貼り付け) – XNor

+0

理論的には、そのフラグは、それ以外の場合は位置依存コードにデフォルト設定されますが、何らかの理由でリンクに失敗するアーキテクチャでは有効です。 –

1

ASRLに優れたセキュリティのおかげにつながる可能位置の独立した実行可能ファイルを構築するために使用される可能性があります。しかし、あなたの代わりに-fpie-pie使用する必要があります。

cc -c -fpie foo.c -o foo.o 
cc -pie foo.o -o foo 
+0

ありがとうございました!私はそのパッケージに本当にその機能が必要ないとは思っていますが、そのフラグも見ていきます。 – XNor

関連する問題