Positionner les exécutables indépendants et Android Lollipop

J'ai écrit un code source .c (dans ecllipse) qui utilise la bibliothèque libcap pour obtenir des informations relatives au trafic réseau. Maintenant, j'ai créé un binaire exécutable en utilisant ndk-build dans ecllipse. J'ai poussé le binaire créé dans le dossier libs / armeabi vers / data / local / folder de mon android (root nexus 5, Lollypop) et j'ai essayé d'exécuter le binaire. Mais Android lance cette erreur

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

  • Android lance l'application à partir du code QR avec des paramètres
  • Réorganiser GSON sérialiser Date de json string dans java.util.date
  • Android @Intdef pour les drapeaux comment l'utiliser
  • Pourquoi la propriété FusedLocationApi.getLastLocation est-elle nulle?
  • Comment récupérer des parties du contenu Wikipedia dans une application Android?
  • Empêchez l'application de ne pas répondre pendant le débogage
  • Je ne sais rien de PIE, s'il vous plaît, dites-moi comment créer un exécutable indépendant de position.

  • Comment définir la mise au point sur Thumb pour Range Seek Bar en mode Accessibilité?
  • Envoi de ACTION_CALL Intention dans Android contenant hash # sign
  • Comment faire glisser un diaporama Android de la gauche?
  • Lecture et écriture SQLite simultanées
  • Flurry intégration dans la même application sur Android et iOS
  • Proguard minifyEnabled true pour la construction de débogage, ne fonctionnant pas sur pré-Lollipop
  • 2 Solutions collect form web for “Positionner les exécutables indépendants et Android Lollipop”

    Je ne sais rien de PIE, s'il vous plaît, dites-moi comment créer un exécutable indépendant de position.

    Position indépendant exécutable ou PIE permet à un programme d'être relocalisé, tout comme un objet partagé. À chaque étape du programme, le programme peut être chargé à différentes adresses pour rendre plus difficile pour un attaquant de deviner certains états de programme.

    Vous pouvez compiler et lier un exécutable PIE de deux façons. Tout d'abord, compilez tout avec -fPIE et liez-le avec -pie . La seconde consiste à compiler tout avec -fPIC et à lier avec -pie .

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

    Vous ne pouvez pas le faire autrement. C'est-à-dire, vous ne pouvez pas compiler tout avec -fPIE et créer à la fois un objet partagé et un programme. Pour les détails, voir Options de génération de code dans le manuel GCC.


    Une chose à surveiller sur Android: construire avec PIE avant 4.1 entraînera un défaut de segmentation dans /system/bin/linker . PIE a été ajouté à Android 4.1, et il bloque des versions moindres.

    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.

    Consultez également les améliorations de sécurité dans Android 1.5 à 4.1 .


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

    Oui, c'est une fonctionnalité Lollipop. Voir les améliorations de 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 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 PIE (exécutable indépendant de la position) pour les exécutables principaux pris en charge dans Android 4.0 (ICS)?

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

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.