2016-01-04 25 views
7

Ho cercato di eseguire un binario compilato nel mio telefono Android, ma continua a dirmi "Nessun file o directory".Come eseguo un binario compilato in Android?

Per essere precisi, ho compilato wificurse e, poiché la descrizione ha menzionato un comando arm, è ovvio che il codice sorgente può essere compilato per un'architettura di braccio senza apportare alcuna modifica al makefile. E così feci il seguente:

export CROSS_COMPILE=arm-linux-gnueabi- 

make CROSS_COMPILE=arm-linux-gnueabi- 

e poi con il conseguente binario (wificurse) ho fatto quanto segue:

adb push wificurse /data 

In una shell adb radice feci:

 [email protected]:/data # chmod 0777 wificurse 

Non restituisce nulla; lavori.

 [email protected]:/data # chmod u+x wificurse 

Restituisce "Modalità non valida".

 [email protected]:/data # busybox chmod 077 wificurse 

Non restituisce nulla; lavori.

 [email protected]:/data # busybox chmod u+x wificurse 

Non restituisce nulla; lavori.

Ma quando provo a fare funzionare il binario con

[email protected]:/data # ./wificurse 

Esso restituisce "/ system/bin/sh: ./wificurse: No such file or directory". Ha fatto ls nella cartella e il file binario è effettivamente lì.

Già provato a copiare il binario sulla sdcard interna, quindi passare a/data (anche provato/system/bin e/system/xbin) e restituisce "Accesso negato", ma se chmod il file binario verrà restituito il stesso errore (nessun file o directory). Qualcuno mi potrebbe aiutare per favore? Ho usato la shell di Linux per 2+ anni, anche se sono completamente un noob quando si tratta di programmazione. Immagino che mi manchi qualcosa come una toolchain, non lo so.
Sto utilizzando Ubuntu 15.10 x64.

risposta

1

Il file binario dipende apparentemente da una libreria condivisa (.so) non è visibile per il collegamento dinamico. È possibile utilizzare readelf dal toolchain e si ottiene qualcosa di simile:

[email protected]:~/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 entries: 
    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 

Verificare che tutte le librerie con il tipo (NEEDED) sono sul tuo dispositivo Android e sono visibili per il vostro binario (si dovrebbe usare export LD_LIBRARY_PATH=<path>[:<another_path>[..]] di rendere disponibile per .so collegamento dinamico con il tuo binario).

Se il problema non viene ancora risolto, l'applicazione è collegata con una versione diversa di alcune librerie di sistema: provare a utilizzare una toolchain precedente.

0

Hai provato i metodi in questa discussione? "No such file or directory" trying to execute linux binary on Android device

Un modo alternativo per risolvere questo problema è l'installazione di KBOX su Android. L'autore ha sviluppato strumenti come gcc, ssh server per la piattaforma Android. Pertanto, è possibile avviare un server ssh sul telefono e svolgere tutto il lavoro sul PC, il che significa che è possibile compilare il codice direttamente sul telefono :)

Problemi correlati