Comment est-ce que je lance un binary compilé dans Android?

J’ai essayé de lancer un fichier binary compilé sur mon téléphone Android, mais il ne cesse de me dire “Pas de fichier ou répertoire”.

Pour être précis, j’ai compilé wificurse , et comme le mentionne la description d’une commande de arm, il est évident que le code source peut être compilé pour une architecture de arm sans modifier le fichier Make. Et j’ai donc fait ce qui suit:

export CROSS_COMPILE=arm-linux-gnueabi- make CROSS_COMPILE=arm-linux-gnueabi- 

Et puis avec le binary résultant (wificurse) j’ai fait ce qui suit:

 adb push wificurse /data 

Dans un shell adb racine, j’ai fait:

  root@android:/data # chmod 0777 wificurse 

Ne renvoie rien; travaux.

  root@android:/data # chmod u+x wificurse 

Retourne “Bad Mode”.

  root@android:/data # busybox chmod 077 wificurse 

Ne renvoie rien; travaux.

  root@android:/data # busybox chmod u+x wificurse 

Ne renvoie rien; travaux.

Mais quand j’essaie de lancer le binary avec

  root@android:/data # ./wificurse 

Il renvoie “/ system / bin / sh: ./wificurse: Pas de fichier ou répertoire de ce type”. Est-ce qu’un ls dans le dossier et le binary est bien là.

Déjà essayé de copier le binary vers la carte SD interne, puis de passer à / data (même essayé / system / bin et / system / xbin) et il retourne “Access denied”, mais si je chmod le binary, il retournera la même erreur (No tel fichier ou répertoire). Quelqu’un peut-il m’aider, s’il vous plaît? J’ai utilisé le shell Linux pendant plus de 2 ans, bien que je sois complètement un noob en matière de programmation. Je suppose que je manque quelque chose comme une chaîne d’outils, je ne sais pas.
Je cours Ubuntu 15.10 x64.

Votre fichier binary dépend apparemment d’une bibliothèque partagée (.so) qui n’est pas visible pour la liaison dynamic. Vous pouvez utiliser readelf de votre chaîne d’outils et vous obtenez quelque chose comme ceci:

 tom@pc:~/workspace/test/arm-v7a_android9/release$ ~/toolchains/armeabiv7a_android-9_ndk-r10e_gcc-4.9/bin/arm-linux-androideabi-readelf -d test Dynamic section at offset 0x445a14 contains 27 ensortinges: Tag Type Name/Value 0x00000003 (PLTGOT) 0x44fc50 0x00000002 (PLTRELSZ) 1864 (bytes) 0x00000017 (JMPREL) 0x74d24 0x00000014 (PLTREL) REL 0x00000011 (REL) 0x74cd4 0x00000012 (RELSZ) 80 (bytes) 0x00000013 (RELENT) 8 (bytes) 0x00000015 (DEBUG) 0x0 0x00000006 (SYMTAB) 0x8148 0x0000000b (SYMENT) 16 (bytes) 0x00000005 (STRTAB) 0x26718 0x0000000a (STRSZ) 273460 (bytes) 0x00000004 (HASH) 0x6934c 0x00000001 (NEEDED) Shared library: [liblog.so] 0x00000001 (NEEDED) Shared library: [libm.so] 0x00000001 (NEEDED) Shared library: [libc.so] 0x00000001 (NEEDED) Shared library: [libdl.so] 0x0000001a (FINI_ARRAY) 0x447cb8 0x0000001c (FINI_ARRAYSZ) 12 (bytes) 0x00000019 (INIT_ARRAY) 0x447cc4 0x0000001b (INIT_ARRAYSZ) 324 (bytes) 0x00000020 (PREINIT_ARRAY) 0x447e08 0x00000021 (PREINIT_ARRAYSZ) 0x8 0x0000001e (FLAGS) BIND_NOW 0x6ffffffb (FLAGS_1) Flags: NOW 0x00000000 (NULL) 0x0 

Vérifiez que toutes les bibliothèques avec le type (NEEDED) sont sur votre appareil Android et sont visibles pour votre fichier binary (vous devez utiliser export LD_LIBRARY_PATH=[:[..]] pour rendre .so disponible pour la liaison dynamic avec votre binary).

Si le problème n’est toujours pas résolu, votre application est liée à une version différente de certaines bibliothèques système – essayez d’utiliser une chaîne d’outils plus ancienne.

Avez-vous essayé les méthodes dans ce fil? “Pas un tel fichier ou répertoire” essayant d’exécuter le binary Linux sur un appareil Android

Une autre façon de résoudre ce problème serait d’installer KBOX sur Android. L’auteur a développé des outils comme gcc, ssh server pour la plateforme Android. Par conséquent, vous pouvez démarrer un serveur ssh sur votre téléphone et faire tout votre travail sur votre PC, ce qui signifie que vous pouvez comstackr votre code directement sur le téléphone 🙂