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!