GNU/Linux >> Tutoriels Linux >  >> Linux

Positionnez les exécutables indépendants et Android

Je ne connais rien à PIE, veuillez me dire comment créer un exécutable indépendant de la position.

Position Independent Executable ou PIE permet de déplacer un programme, tout comme un objet partagé. À chaque exécution du programme, le programme peut être chargé à différentes adresses pour qu'il soit plus difficile pour un attaquant de deviner certains états du programme.

Vous pouvez compiler et lier un exécutable PIE de deux manières. Tout d'abord, compilez tout avec -fPIE et lien avec -pie . La seconde est de tout compiler avec -fPIC et lien avec -pie .

Si vous construisez à la fois un objet partagé et un programme, alors compilez tout avec -fPIC . Liez l'objet partagé avec -shared , et liez le programme avec -pie .

Vous ne pouvez pas le faire dans l'autre sens. Autrement dit, vous ne pouvez pas tout compiler avec -fPIE et construire à la fois un objet partagé et un programme. Pour plus de détails, voir Options de génération de code dans le manuel de GCC.

Une chose à surveiller sur Android :la construction avec PIE avant 4.1 entraînera une erreur de segmentation dans /system/bin/linker . PIE a été ajouté à Android 4.1, et il plante les versions inférieures.

Quelqu'un m'a dit de fournir un lien/chargeur personnalisé pour éviter le problème, mais je ne trouve pas la référence pour le moment.

Voir également Améliorations de la sécurité dans Android 1.5 à 4.1.

Erreur :seuls les exécutables indépendants de la position (PIE) sont pris en charge

Oui, c'est une fonction Lollipop. Voir Améliorations de la sécurité dans Android 5.0.

Vous pouvez vérifier si un programme est construit avec PIE en utilisant readelf :

$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)

La partie importante est readelf rapporte DYN , et ne signale pas EXE . EXE signifie qu'il manque de PIE, et cela devrait déclencher un défaut lié à la sécurité.

En relation, voir Est-ce que PIE (exécutable indépendant de la position) pour les principaux exécutables est pris en charge dans Android 4.0 (ICS) ?


Je sais que c'est un vieux sujet, mais cette façon de faire peut faire gagner du temps à certaines personnes.
avec un Hex-Editor, trouvez le 17ème octet, changez la valeur 02 en 03, et c'est tout !


Linux
  1. Comment programmer avec Bash :syntaxe et outils

  2. Comment compiler et exécuter le programme C dans Ubuntu

  3. Modifier et recompiler un programme individuel ?

  4. 5 meilleures applications Android SSH et FTP pour Linux

  5. Comment détecter et découvrir qu'un programme est dans l'impasse ?

Pinfo - Un programme CLI pour lire les informations et les pages de manuel en couleur

GNU Aspell - Un correcteur orthographique gratuit, open source et indépendant

Comment écrire et exécuter un programme C dans Debian 10

Comment trouver l'ID de processus d'un programme et le tuer [Astuce rapide]

Comment compiler et exécuter un programme C sous Linux

Comment écrire et exécuter un programme C sous Linux