Position Independent Executables und Android Lollipop

Ich habe einen .c-Quellcode (in ecllipse) geschrieben, der die libcap-Bibliothek benutzt, um Informationen über den Netzwerkverkehr zu erhalten. Jetzt habe ich eine ausführbare Binärdatei mit ndk-build in ecllipse erstellt. Ich habe die erstellte Binärdatei in libs / armeabi Ordner zu / data / local / folder von meinem android (verwurzelt nexus 5, Lollypop) gedrückt und versucht, die Binärdatei auszuführen. aber Androide wirft diesen Fehler

Fehler: Es werden nur positionsspezifische ausführbare Dateien (PIE) unterstützt

Ich weiß nichts über PIE, bitte sag mir, wie man eine Position unabhängige ausführbare zu erstellen.

  • Adb hört auf, mein Telefon nach einer Weile zu erkennen
  • Adb-Fehler auf Android SDK. Verwenden von Linux Ubuntu 64 Bit 12.10
  • Android Studio 2.3.3 steckt beim ersten Start
  • Ndk-build Befehl nicht gefunden in Ubuntu Terminal
  • Erfahren Sie mehr über Android-Interna (tauchen Sie tief in das System ein)
  • Wie kann ich eine kompilierte Binärdatei in Android ausführen?
  • Android Plugin installieren Probleme in Eclipse
  • Bluez Architektur: Erklären Sie diese Architektur
  • 2 Solutions collect form web for “Position Independent Executables und Android Lollipop”

    Ich weiß nichts über PIE, bitte sag mir, wie man eine Position unabhängige ausführbare zu erstellen.

    Position Independent Executable oder PIE erlaubt es, ein Programm zu verlagern, genau wie ein gemeinsames Objekt. Bei jedem Programmlauf kann das Programm an verschiedenen Adressen geladen werden, um es für einen Angreifer schwerer zu machen, einen bestimmten Programmzustand zu erraten.

    Sie können eine PIE ausführbare Datei auf zwei Arten kompilieren und verknüpfen. Zuerst alles mit -fPIE kompilieren und mit -pie Die zweite ist, alles mit -fPIC zu kompilieren und mit -pie .

    Wenn Sie sowohl ein gemeinsames Objekt als auch ein Programm erstellen, dann kompilieren Sie alles mit -fPIC . Verknüpfe das freigegebene Objekt mit -shared und verknüpfe das Programm mit -pie .

    Du kannst es nicht anders machen. Das heißt, man kann nicht alles mit -fPIE kompilieren und sowohl ein gemeinsames Objekt als auch ein Programm erstellen. Weitere Informationen finden Sie unter Codegenerierungsoptionen im GCC-Handbuch.


    Eine Sache, die auf Android aufpassen soll: Das Erstellen von PIE vor 4.1 wird zu einem Segmentierungsfehler in /system/bin/linker . PIE wurde bei Android 4.1 hinzugefügt, und es stürzt kleinere Versionen.

    Jemand hat mir gesagt, ich solle einen benutzerdefinierten Link / Loader liefern, um das Problem zu vermeiden, aber ich kann den Hinweis im Moment nicht finden.

    Siehe auch Sicherheitsverbesserungen in Android 1.5 bis 4.1 .


    Fehler: Es werden nur positionsspezifische ausführbare Dateien (PIE) unterstützt

    Ja, das ist ein Lollipop-Feature. Siehe Sicherheitsverbesserungen in Android 5.0 .


    Sie können überprüfen, ob ein Programm mit PIE mit readelf :

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

    Der wichtige Teil lautet, berichtet DYN und berichtet nicht EXE . EXE bedeutet, es fehlt PIE, und das sollte einen sicherheitsrelevanten Defekt auslösen.


    Verwandte, siehe Ist PIE (Position-unabhängige ausführbare Datei) für Haupt-Executables, die in Android 4.0 (ICS) unterstützt werden?

    Ich weiß, das ist ein altes Thema, aber dieser hacky Weg kann einige Leute Zeit sparen
    mit einem Hex-Editor, finden Sie das 17. Byte, ändern Sie den Wert 02 bis 03, und das ist es!

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.