android - ¿Cuáles son las posibles causas de "error al asignar el segmento del objeto compartido: operación no permitida" y cómo depurar?
linker executable (3)
Tengo dos ejecutables, ambos compilados para ejecutar en Android. He puesto ambos en el dispositivo en el mismo directorio. He puesto todas las bibliotecas compartidas de las que dependen en el mismo directorio, incluido ld-linux.so.3. Ejecuto los ejecutables usando:
ld-linux.so.3 --library-path / ruta / a / libraries nombre_de_ejecución
ambos funcionan en versiones anteriores de Android cuando se ejecuta como cualquier usuario. Ambos funcionan en la última versión de Android si se ejecuta como root. Solo uno funciona con la última versión de Android cuando se ejecuta como cualquier usuario. En cambio, da:
No se pudo asignar el segmento del objeto compartido: no se permite la operación del nombre del ejecutable
¿Cómo puedo averiguar qué es diferente con el ejecutable que no se ejecutará?
Leo mucho en línea y la mayoría de las personas que reciben este error, ya sea:
A) no tienen permisos de ejecución para una de las bibliotecas de las que dependen o el ejecutable mismo.
o
B) están intentando ejecutar desde un directorio que está montado como NOEXEC.
ninguno de estos parece ser el caso. Puede encontrar todas las bibliotecas y puedo cargar cualquier biblioteca por sí mismo y ver de qué otras cosas depende que se resuelvan. Además, puedo ejecutar scripts básicos desde los directorios de interés.
La versión más nueva de Android, Jelly Bean, es una versión diferente del kernel de Linux y me pregunto si eso está relacionado.
¿Que da? ¿Cómo debo depurar?
SELinux está habilitado por defecto en Android 4.3, sin embargo, se supone que es "permisivo" [0]. Tal vez el proveedor de su teléfono agregó reglas más restrictivas.
[0] https://source.android.com/devices/tech/security/se-linux.html
El problema era con la compilación de los ejecutables. Necesitaban compilarse con un compilador cruzado que soportara adecuadamente los dispositivos de brazo más nuevos. El compilador que utilicé generó ejecutables que solo funcionarían en un subconjunto de dispositivos de brazo. El problema no era con las diferentes versiones de Android.
Tuve este error en un contexto diferente. Por algún motivo, causa un error al intentar usar la carpeta / tmp .
Para resolver esto simplemente:
mkdir tmp
export TMPDIR=`pwd`/tmp