1 votos

Ejecutar ejecutable ARM ELF de 32 bits en Android de 64 bits

Por diversas razones de prueba, necesito ejecutar mis propios ejecutables ARM ELF de 32 bits en varios dispositivos Android ARM reales (no puedo usar emuladores). Debido a que no es fácil comprar un dispositivo ARMv7 en la actualidad, me gustaría ejecutar los ejecutables en dispositivos Android de 64 bits. Sin embargo, todos los dispositivos de 64 bits de varios proveedores a los que tengo acceso se niegan a ejecutar los ejecutables con este mensaje:

no ejecutable: archivo ELF de 32 bits

Esto significa que el sistema no puede ejecutar archivos ELF de 32 bits, o puede ejecutarlos pero está configurado para rechazarlos. ¿Hay algún truco para hacer que el sistema operativo de 64 bits ejecute ejecutables de 32 bits, al igual que Windows de 64 bits o Linux de 64 bits pueden ejecutar ejecutables de 32 bits?

Utilizo los siguientes pasos para enviar y ejecutar el archivo:

adb push printf /data/local/tmp/
adb shell chmod 555 /data/local/tmp/printf
adb shell /data/local/tmp/printf

Esto retorna:

/system/bin/sh: /data/local/tmp/printf: no ejecutable: archivo ELF de 32 bits

1 votos

El mensaje de error es engañoso, es otra razón. descargar busybox e intentar busybox printf

0 votos

@alecxs ¿Puedes ser más específico por favor? Cuando renombro mi ejecutable printf a printfx y ejecuto ./busybox-armv8l printfx desde /data/local/tmp/, dice "printfx: applet not found" porque espera que el parámetro sea una de las funciones compatibles con busybox.

0 votos

Principalmente los dispositivos ARM64 (procesadores) admiten ejecución de 32 bits. Pero lo contrario tampoco es imposible. Mayormente los núcleos de Linux/Android de 64 bits están construidos para admitir el modo de compatibilidad de 32 bits, pero lo contrario tampoco es imposible. Detalles aquí: ¿Podría un dispositivo de hardware de 64 bits ejecutar una versión de Android de 32 bits?. Pero intenta con algunos binarios preconstruidos para asegurarte de que el problema no radica en tu enlace estático (o dinámico), ambiente, permisos, etc. ¿Qué devuelve ls -lZ /data/local/tmp/printf; file /data/local/tmp/printf? ¿Root? SELinux?

1voto

PJ_ Puntos 8

Esta pregunta fue vista muchas veces y merece una respuesta:

Los procesadores ARMv8 son compatibles solo con ARMv7. Tu binario debe ser al menos ARM v5/v6. Reconstrúyelo para armeabi-v7a como mínimo.

Como respondió correctamente Irfan Latif en los comentarios.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X