2010-03-17 12 views

Répondre

52

PIE est de soutenir dans des fichiers exécutables.

Avant le mode PIE a été créé, l'exécutable du programme ne pouvait être placé à une adresse aléatoire dans la mémoire, seule position code indépendant (PIC) les bibliothèques dynamiques peuvent être déplacées vers un décalage aléatoire, ce qui ressemble beaucoup à ce que PIC fait pour les bibliothèques dynamiques. En d'autres termes, la différence est qu'une table de liaison de procédure (PLT) n'est pas créée, mais que la relocalisation relative au PC est utilisée.

Après avoir activé la prise en charge PIE dans gcc/linkers, le corps du programme est compilé et lié en tant que code indépendant de la position. Un éditeur de liens dynamique effectue un traitement de relocalisation complet sur le module de programme, tout comme les bibliothèques dynamiques. Toute utilisation de données globales est convertie en accès via la table des décalages globaux (GOT) et les relocalisations GOT sont ajoutées.

PIE est bien décrit dans this OpenBSD PIE presentation.

Les changements de fonctions sont affichés in this slide (PIE vs PIC).

pic x86 vs tarte

variables globales locales et fonctions sont optimisées dans la tarte

variables globales externes et les fonctions sont les mêmes que pic

et this slide (PIE vs Ancien- liaison de style)

x86 tarte vs no-flags (fixe)

variables globales locales et les fonctions sont similaires à fixes

variables globales externes et les fonctions sont les mêmes que pic

Notez que PIE peut être incompatible avec -static

+2

également dans wikipedia: http: //en.wikipedia.org/wiki/Position-independent_code#Position-independent_executables – osgx

+3

Pourquoi -pie et -static sont compatibles sur ARM et ne sont PAS compatibles avec x86? Ma question SO: http://stackoverflow.com/questions/27082959/gcc-static-and-pie-are-incompatible-for-x86 – 4ntoine

Questions connexes