2015-05-28 10 views
15

Ho scritto un codice sorgente .c (in ecllipse) che utilizza la libreria di libcap per ottenere informazioni relative al traffico di rete. Ora ho creato un eseguibile eseguibile usando ndk-build in ecllipse. Ho spinto il file binario creato nella cartella libs/armeabi in/data/local/folder del mio android (rooted nexus 5, Lollypop) e ho provato ad eseguire il binario. ma Android sta gettando questo erroreEseguibili indipendenti posizione e Android Lollipop

Error: only position independent executables (PIE) are supported

Io non so niente di PIE, La prego di dirmi come creare una posizione eseguibile indipendente.

+0

risolto, basta aggiungere queste due righe nel file di Android.mk –

+1

LOCAL_CFLAGS + = -fPIE LOCAL_LDFLAGS + = -fPIE -pie –

risposta

17

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)?

+0

Grazie @jww per la risposta dettagliata –

+0

@jww avevo compilato il linker sen. Puoi ottenerlo da qui http://lifepluslinux.blogspot.com/2015/01/installing-python-on-android-50.html – leet

4

so che questo è un argomento vecchio, ma in questo modo hacky può salvare alcune persone il tempo
con un editor esadecimale, trovare il 17 ° di byte, modificare il valore 02-03 e questo è tutto!

+0

Questo non ha funzionato. TY –

Problemi correlati