studio - android tag
PosiciĆ³n Ejecutables Independientes y Android (2)
No sé nada acerca de PIE. Por favor, dígame cómo crear un ejecutable independiente de la posición.
Position Independent Executable o PIE permite reubicar un programa, al igual que un objeto compartido. En cada ejecución del programa, el programa se puede cargar en diferentes direcciones para que a un atacante le resulte más difícil adivinar cierto estado del programa.
Puede compilar y vincular un ejecutable PIE de una de las dos maneras. Primero, compile todo con -fPIE
y vincule con -pie
. El segundo es compilar todo con -fPIC
y enlazar con -pie
.
Si está creando un objeto compartido y un programa, compile todo con -fPIC
. Enlace el objeto compartido con -shared
, y enlace el programa con -pie
.
No puedes hacerlo de la otra manera. Es decir, no puede compilar todo con -fPIE
y compilar un objeto compartido y un programa. Para obtener más información, consulte Opciones de generación de código en el manual de GCC.
Una cosa a tener en cuenta en Android: construir con PIE antes de 4.1 causará un error de segmentación en /system/bin/linker
. PIE se agregó en Android 4.1 y bloquea versiones menores.
Alguien me dijo que proporcionara un enlace / cargador personalizado para evitar el problema, pero no puedo encontrar la referencia en este momento.
También vea Mejoras de seguridad en Android 1.5 a 4.1 .
Error: solo se admiten los ejecutables independientes de posición (PIE)
Sí, esa es una característica de Lollipop. Ver mejoras de seguridad en Android 5.0 .
Puede verificar si un programa está construido con PIE usando readelf
:
$ readelf -l my-prog | grep -i "file type"
Elf filetype is DYN (shared object file)
La parte importante es la readelf
es reportar DYN
y no reportar EXE
. EXE
significa que carece de PIE, y eso debería provocar un defecto relacionado con la seguridad.
Relacionados, consulte ¿Es compatible PIE (ejecutable independiente de la posición) para los ejecutables principales en Android 4.0 (ICS)?
He escrito un código fuente .c (en Eclipse) que utiliza la biblioteca libcap para obtener información relacionada con el tráfico de la red. Ahora he creado un binario ejecutable utilizando ndk-build en Eclipse. He empujado el binario creado en la carpeta libs / armeabi a la carpeta / data / local / de mi android (rooted nexus 5, Lollipop) y he intentado ejecutar el binario. Pero Android está lanzando este error.
Error: solo se admiten los ejecutables independientes de posición (PIE)
No sé nada acerca de PIE. Por favor, dígame cómo crear un ejecutable independiente de la posición.
Sé que este es un tema antiguo, pero esta manera intrépida puede ahorrarle tiempo a algunas personas
con un editor hexadecimal, encuentre el byte 17, cambie el valor 02 a 03, y eso es todo!