2010-03-17 7 views

Antwort

52

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

+2

Auch in wikipedia: http: //en.wikipedia.org/wiki/Position-independent_code#Position-independent_executables – osgx

+3

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

Verwandte Themen