2016-01-04 65 views
7

Próbowałem uruchomić skompilowany plik binarny w moim telefonie z Androidem, ale wciąż mówi mi "Brak takiego pliku lub katalogu".Jak uruchomić skompilowany plik binarny w systemie Android?

Mówiąc konkretnie, skompilowałem wificurse, a ponieważ opis wspomniał o poleceniu uzbrojenia, oczywistym jest, że kod źródłowy można skompilować dla architektury ramienia bez dokonywania jakichkolwiek zmian w pliku makefile. A więc nie następuje:

export CROSS_COMPILE=arm-linux-gnueabi- 

make CROSS_COMPILE=arm-linux-gnueabi- 

a następnie z otrzymanego binarnie (wificurse), że nie następuje:

adb push wificurse /data 

w korzeniu adb powłoki robiłam:

 [email protected]:/data # chmod 0777 wificurse 

Nic nie zwraca; Prace.

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

Powraca "Bad Mode".

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

Nic nie zwraca; Prace.

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

Nic nie zwraca; Prace.

Ale gdy próbuję uruchomić plik binarny z

[email protected]:/data # ./wificurse 

Zwraca "/ system/bin/sh: ./wificurse: Nie ma takiego pliku lub katalogu". Czy ls w folderze i plik binarny rzeczywiście istnieje.

Próbowałem już skopiować plik binarny na wewnętrzny sdcard, a następnie przechodząc do/data (nawet wypróbowałem/system/bin i/system/xbin) i zwraca "Access denied", ale jeśli chmodę binarną zwróci to ten sam błąd (brak takiego pliku lub katalogu). Czy ktoś może mi pomóc? Użyłem powłoki linuksa przez ponad 2 lata, ale jestem kompletnie noobem, jeśli chodzi o programowanie. Sądzę, że brakuje mi czegoś takiego jak toolchain, nie wiem.
Używam Ubuntu 15.10 x64.

Odpowiedz

1

Twój plik binarny prawdopodobnie zależy od udostępnionej biblioteki (.so) który nie jest widoczny dla dynamicznego linkowania. Można użyć readelf z toolchain i masz coś takiego:

[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 

sprawdzić, czy wszystkie biblioteki z rodzaju (NEEDED) są na swoim urządzeniu z Androidem i są widoczne dla binarnym (należy użyć export LD_LIBRARY_PATH=<path>[:<another_path>[..]] aby .so dostępne dynamiczne łączenie z twoim binarnym).

Jeśli problem nie został rozwiązany, aplikacja jest połączona z inną wersją biblioteki systemowej - spróbuj użyć starszego zestawu narzędzi.

0

Czy próbowałeś metod w tym wątku? "No such file or directory" trying to execute linux binary on Android device

Alternatywnym sposobem rozwiązania tego problemu byłoby zainstalowanie KBOX na Androidzie. Autor opracował narzędzia takie jak gcc, serwer ssh dla platformy Android. Dlatego możesz uruchomić serwer ssh na swoim telefonie i wykonywać całą pracę na komputerze, co oznacza, że ​​możesz skompilować swój kod bezpośrednio na telefonie :)

Powiązane problemy