avec la nouvelle version XUBUNTU 18.4
pour la compilation j'ai rencontré un problème
je ne trouve pas vraiment d'explication , sauf que si je ne met pas cela " dans les options -no-pie" je n'obtient pas un executable ????? mais une lib
quelqu'un pourrait développer cela svp le compilateur est 7.3 GCC , il parait que le compilateur GCC a été paramétrer avec cela , mais pourquoi ???? là je bute
quelques explications seraient bienvenus ....
merci
deux explications (mais elles ne viennent pas de moi ) mais dans ce cas on perd la notion d'executable ... ????
Parce que d’une part, tu ne spécifies à aucun moment que tu souhaites avoir un objet partagé lors de l’édition de liens (implicite), d’autre part, l’option -no-pie spécifie que ton binaire sera toujours chargé en mémoire à la même adresse de référence.
"pie" signifie Position Independent Executable. L’intérêt d’utiliser cette option est de pouvoir, à chaque exécution de ton binaire, le charger à des adresses mémoires différentes (exactement comme pour des objets partagés qui ont besoin d’être relocalisés en mémoire en permanence plutôt que de toujours être chargés à une adresse mémoire fixe, ce qui peut entraîner des problèmes de collisions si deux objets partagés doivent être chargés à la même adresse, par exemple).
L’intérêt de faire ça pour un binaire exécutable et pourquoi pas seulement pour les objets partagés ? Eh bien il s’agit d’une mesure d’atténuation (je ne sais pas comment traduire correctement "mitigation") d’attaques informatique de type Return Oriented Programming où tu vas corrompre la mémoire de ton binaire pour exécuter un code arbitraire. Et pour exécuter ce code arbitraire, tu as besoin de savoir à quels adresses mémoires chercher les bonnes informations. Et comme avec l’option PIE les adresses ne sont jamais les mêmes à chaque exécution, ça rend l’exploitation d’une vulnérabilité plus compliqué que prévu.
ou encore ....
Il semble que GCC soit configuré pour créer des binaires -pie par défaut. Ces binaires sont en réalité des bibliothèques partagées (de type ET_DYN), sauf qu'ils s'exécutent exactement comme un exécutable normal. mais ne sont pas marqué executable donc il faut soit les faire monter avec un lanceur ou dans un terminal si l'on conserve l'option -pie (perso je trouve que l'on aurait pu les marqués comme executable c'est plus simple lors de test etc... mais j'ai peut-etre pas compris)
j'ai trouvé les paramètres par défaut
Linker Options
object-file-name -llibrary -nostartfiles -nodefaultlibs
-nostdlib -pie -rdynamic -s -static -static-libgcc
-static-libstdc++ -shared -shared-libgcc -symbolic -T script
-Wl,option -Xlinker option -u symbol
comment avez-vous pris ou résolu la chose ..... par exemple le double clik dans thunar sur votre new executable ( -pie) bennnn ça marche pas
Partager