Was ist die -fPIE
(-gehen "lageunabhängig ausführbar") Option für erforderlich in gcc und ld?-fPIE ("lageunabhängig ausführbar) Option (gcc, ld)
Wie wird es die ändern Code, zB Funktion aufruft?
Was ist die -fPIE
(-gehen "lageunabhängig ausführbar") Option für erforderlich in gcc und ld?-fPIE ("lageunabhängig ausführbar) Option (gcc, ld)
Wie wird es die ändern Code, zB Funktion aufruft?
PIE in ausführbaren Dateien zu unterstützen.
Bevor der PIE-Modus erstellt wurde, das ausführbare Programm nicht an einer beliebigen Adresse im Speicher platziert werden konnte, nur Position unabhängiger Code (PIC) Dynamische Bibliotheken können in einen zufälligen Offset verschoben werden und funktionieren ähnlich wie PIC für dynamische Librari Der Unterschied besteht darin, dass keine Prozedur-Verknüpfungstabelle (PLT) erstellt wird, stattdessen wird eine PC-relative Verschiebung verwendet.
Nachdem die PIE-Unterstützung in gcc/linkers aktiviert wurde, wird der Hauptteil des Programms kompiliert und als positionsunabhängiger Code verknüpft. Ein dynamischer Linker führt die vollständige Verschiebungsverarbeitung auf dem Programmmodul durch, genau wie dynamische Bibliotheken. Jede Verwendung von globalen Daten wird in den Zugriff über die Global Offsets Table (GOT) konvertiert, und GOT-Verschiebungen werden hinzugefügt.
PIE ist in this OpenBSD PIE presentation gut beschrieben.
Änderungen der Funktionen werden angezeigt in this slide (PIE vs PIC).
x86 pic vs pie
Lokale globale Variablen und Funktionen werden in pie optimiert
Externe globale Variablen und Funktionen sind selben wie pic
und in this slide (PIE vs Old- Stilverknüpfung)
x86 Kuchen vs No-Flags (fest)
Lokale globale Variablen und Funktionen sind ähnlich festen
Externe globale Variablen und Funktionen sind die gleichen wie pic
Hinweis, dass PIE möglicherweise nicht kompatibel mit -static
Auch in wikipedia: http: //en.wikipedia.org/wiki/Position-independent_code#Position-independent_executables – osgx
Warum -pie und -static sind auf ARM kompatibel und NICHT kompatibel zu x86? Meine SO Frage: http://stackoverflow.com/questions/27082959/gcc-static-and-pie-are-incompatible-for-x86 – 4ntoine