GNU/Linux >> Linux Esercitazione >  >> Linux

Eseguibili indipendenti dalla posizione e Android

Non so nulla di PIE, per favore dimmi come creare un eseguibile indipendente dalla posizione.

Position Independent Executable o PIE consente di riposizionare un programma, proprio come un oggetto condiviso. Ad ogni esecuzione del programma, il programma può essere caricato a indirizzi diversi per rendere più difficile per un utente malintenzionato indovinare un determinato stato del programma.

Puoi compilare e collegare un eseguibile PIE in due modi. Per prima cosa, compila tutto con -fPIE e collega con -pie . Il secondo è compilare tutto con -fPIC e collegamento con -pie .

Se stai costruendo sia un oggetto condiviso che un programma, allora compila tutto con -fPIC . Collega l'oggetto condiviso con -shared e collega il programma con -pie .

Non puoi farlo nell'altro modo. Cioè, non puoi compilare tutto con -fPIE e costruire sia un oggetto condiviso che un programma. Per i dettagli, vedi Opzioni di generazione del codice nel manuale di GCC.

Una cosa a cui prestare attenzione su Android:la compilazione con PIE precedente alla 4.1 causerà un errore di segmentazione in /system/bin/linker . PIE è stato aggiunto su Android 4.1 e blocca le versioni inferiori.

Qualcuno mi ha detto di fornire un collegamento/caricatore personalizzato per evitare il problema, ma al momento non riesco a trovare il riferimento.

Vedi anche Miglioramenti della sicurezza in Android da 1.5 a 4.1.

Errore:sono supportati solo gli eseguibili indipendenti dalla posizione (PIE)

Sì, è una funzionalità di Lollipop. Guarda i miglioramenti della sicurezza in Android 5.0.

Puoi controllare se un programma è compilato con PIE usando readelf :

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

La parte importante è readelf sta segnalando DYN e non riportando EXE . EXE significa che manca di PIE e che dovrebbe innescare un difetto relativo alla sicurezza.

Correlati, vedi PIE (Eseguibile indipendente dalla posizione) per i principali eseguibili supportati in Android 4.0 (ICS)?


So che questo è un vecchio argomento, ma questo modo hacky potrebbe far risparmiare tempo ad alcune persone
con un Hex-Editor , trova il 17esimo byte, cambia il valore da 02 a 03, e il gioco è fatto!


Linux
  1. Differenza tra il programma di avvio Systemd e Terminal?

  2. Programma Shell per aprire un driver di caratteri e aspettare?

  3. 5 migliori app Android SSH e FTP per Linux

  4. Come rilevare e scoprire che un programma è in stallo?

  5. Android Impossibile avviare l'emulatore:impossibile eseguire il programma

Pinfo – Un programma CLI per leggere informazioni e pagine man a colori

GNU Aspell – Un correttore ortografico gratuito, open source e indipendente

Come scrivere ed eseguire un programma C in Debian 10

Come trovare l'ID di processo di un programma e ucciderlo [Suggerimento rapido]

Come compilare ed eseguire il programma C in Linux

Come scrivere ed eseguire un programma C in Linux