GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Positionsunabhängige ausführbare Dateien und Android

Ich weiß nichts über PIE, bitte sagen Sie mir, wie man eine positionsunabhängige ausführbare Datei erstellt.

Position Independent Executable oder PIE ermöglicht es, ein Programm genau wie ein gemeinsam genutztes Objekt zu verschieben. Bei jeder Ausführung des Programms kann das Programm an verschiedenen Adressen geladen werden, um es einem Angreifer schwerer zu machen, einen bestimmten Programmstatus zu erraten.

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

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

Sie können es nicht anders machen. Das heißt, Sie können nicht alles mit -fPIE kompilieren und sowohl ein gemeinsam genutztes Objekt als auch ein Programm erstellen. Einzelheiten finden Sie unter Optionen zur Codegenerierung im GCC-Handbuch.

Eine Sache, auf die Sie bei Android achten sollten:Das Erstellen mit PIE vor 4.1 führt zu einem Segmentierungsfehler in /system/bin/linker . PIE wurde bei Android 4.1 hinzugefügt und stürzt bei niedrigeren Versionen ab.

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

Siehe auch Sicherheitsverbesserungen in Android 1.5 bis 4.1.

Fehler:Nur positionsunabhängige ausführbare Dateien (PIE) werden unterstützt

Ja, das ist eine Lollipop-Funktion. Siehe Sicherheitsverbesserungen in Android 5.0.

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

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

Der wichtige Teil ist readelf meldet DYN , und EXE wird nicht gemeldet . EXE bedeutet, dass ihm PIE fehlt, und das sollte einen sicherheitsrelevanten Defekt auslösen.

Verwandte Informationen finden Sie unter Wird PIE (Positionsunabhängige ausführbare Datei) für die wichtigsten ausführbaren Dateien in Android 4.0 (ICS) unterstützt?


Ich weiß, dass dies ein altes Thema ist, aber dieser Hacky-Weg kann einigen Leuten Zeit sparen
mit einem Hex-Editor das 17. Byte finden, den Wert 02 auf 03 ändern, fertig!


Linux
  1. Programmieren mit Bash:Syntax und Tools

  2. Programm-Gui-Front-End und Cli-Funktionalität getrennt halten?

  3. Shell-Programm, um einfach einen Zeichentreiber zu öffnen und zu warten?

  4. 5 beste SSH- und FTP-Android-Apps für Linux

  5. Wie erkennt und findet man heraus, dass sich ein Programm im Deadlock befindet?

Pinfo – Ein CLI-Programm zum Lesen von Informationen und Manpages in Farbe

GNU Aspell – Eine kostenlose, Open Source und unabhängige Rechtschreibprüfung

Wie man ein C-Programm in Debian 10 schreibt und ausführt

So finden Sie die Prozess-ID eines Programms und beenden es [Kurztipp]

Wie man ein C-Programm unter Linux kompiliert und ausführt

Wie man ein C-Programm unter Linux schreibt und ausführt