Quel est le -fPIE
(-tarte, "indépendant de la position exécutable") l'option nécessaire dans gcc et ld?-fPIE (option "exécutable indépendant de la position) (gcc, ld)
Comment cela va changer la code, fonction par exemple les appels?
Quel est le -fPIE
(-tarte, "indépendant de la position exécutable") l'option nécessaire dans gcc et ld?-fPIE (option "exécutable indépendant de la position) (gcc, ld)
Comment cela va changer la code, fonction par exemple les appels?
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
également dans wikipedia: http: //en.wikipedia.org/wiki/Position-independent_code#Position-independent_executables – osgx
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