2016-04-11 12 views
2

Ich arbeite derzeit an einigen Legacy-Paketen und ich sehe, dass einige Makefile s Flag verwenden, um die endgültige ausführbare Datei zu kompilieren.Kompilieren ausführbar mit "-fPIC" -Flag (keine gemeinsame Bibliothek)

Mein Verständnis ist, dass dies beim Erstellen einer gemeinsamen Bibliothek verwendet wird und dass es keinen Sinn macht, es beim Erstellen einer ausführbaren Datei zu verwenden.

Ich frage mich, ob ich Recht habe oder mir etwas fehlt, denn wenn ich im Internet suche, bekomme ich nur Ergebnisse über gemeinsame Bibliotheken und nicht ausführbare Dateien.

Danke,

+0

Überprüfen Sie Wikipedia für mögliche Gründe: https://en.wikipedia.org/wiki/Position-independent_code – hek2mgl

Antwort

2

Position unabhängiger Code kann nützlich außerhalb des gemeinsam genutzten Bibliothek Kontextes sein. Ein häufiger Fall ist Address space layout randomization, der die endgültige ausführbare Datei sicherer gegen Code-Injection-Angriffe macht.

In mehreren Verteilungen, wie Fedora, werden die meisten Pakete als PIE erstellt.

+0

Danke! Das ist sehr interessant, obwohl das Makefile der Anwendung, die ich mir ansehe, nicht so sensibel ist (kleine Test-App), also glaube ich, dass sie diese Flagge versehentlich hinzugefügt haben :) (zB copy-paste) – XNor

+0

Theoretisch, Dieses Flag könnte auf einigen Architekturen nützlich sein, die ansonsten auf positionsabhängigen Code zurückgreifen würden, aber aus irgendeinem Grund keine Verbindung herstellen können. –

1

Es könnte verwendet werden Position unabhängig ausführbaren Dateien zu bauen, die zu einer besseren Sicherheit durch ASRL führen kann. Allerdings sollten Sie stattdessen -fpie und -pie verwenden:

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

Vielen Dank! Ich werde auch auf diese Flagge schauen, obwohl ich denke, dass das Paket diese Funktion nicht wirklich benötigt. – XNor

Verwandte Themen