I don't know anything about PIE, Please tell me how to create a position independent executable.
Position Independent Execable o PIE consente di spostare 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 determinati stati del programma.
È possibile compilare e collegare un eseguibile PIE in due modi. Innanzitutto, compila tutto con -fPIE
e collega con -pie
. Il secondo è quello di compilare tutto con -fPIC
e il collegamento con -pie
.
Se si sta costruendo sia un oggetto condiviso che un programma, compilare il tutto con -fPIC
. Collega l'oggetto condiviso con -shared
e collega il programma con -pie
.
Non puoi farlo dall'altra parte. Cioè, non puoi compilare tutto con -fPIE
e creare sia un oggetto condiviso che un programma. Per i dettagli, vedere Code Generation Options nel manuale GCC.
Una cosa a cui prestare attenzione su Android: edificio con PIE prima 4.1 causerà un errore di segmentazione in /system/bin/linker
. PIE è stato aggiunto ad Android 4.1 e si blocca versioni minori.
Qualcuno mi ha detto di fornire un collegamento/caricatore personalizzato per evitare il problema, ma al momento non riesco a trovare il riferimento.
Vedere anche Security Enhancements in Android 1.5 through 4.1.
Error: only position independent executables (PIE) are supported
Sì, è una caratteristica Lollipop. Vedi Security Enhancements in Android 5.0.
È possibile controllare se un programma è costruito con PIE utilizzando readelf
:
$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)
La parte importante è readelf
sta riportando DYN
, e non la segnalazione EXE
. EXE
significa che manca la torta e che dovrebbe innescare un difetto relativo alla sicurezza.
correlate, vedere Is PIE (Position-independent executable) for main executables supported in Android 4.0 (ICS)?
risolto, basta aggiungere queste due righe nel file di Android.mk –
LOCAL_CFLAGS + = -fPIE LOCAL_LDFLAGS + = -fPIE -pie –