Esecuzione del proprio eseguibile su shell Android


14

Ho bisogno di uno specifico strumento da riga di comando e ho creato un programma C nella mia shell Linux. Ho compilato il programma con un cross-compilatore ARM. Ho quindi spostato il programma nel file system Android e ho provato a eseguirlo.

L'output è stato negato l'autorizzazione.

Cosa devo fare per eseguire i miei programmi compilati nel file system Android?


Provato chmod +x pgme poi ./pgmanche?
ott--

8
Forse l'hai posizionato sulla tua sdcard - che è montata con la noexecbandiera. È necessario spostarlo nella memoria interna del telefono o eseguirlo tramite una shell (ad es sh /path/to/myexecutable.).
Izzy

Risposte:


14

Presumo che tu abbia usato adb push per caricare il tuo eseguibile sulla scheda SD. Sfortunatamente la scheda SD è sempre montata con "noexec", il che significa che non è possibile eseguire nulla da qui.

Pertanto è necessario copiare il file eseguibile nel filesystem locale, ad es. In / data / local. Nel caso in cui il dispositivo non sia rootato o BusyBox non sia installato, non ci sarà alcun comando "cp". Si può semplicemente utilizzare cat: cat /sdcard/myprog > /data/local/myprog.

Quindi devi impostare l'autorizzazione dell'eseguibile sull'eseguibile. Chmod su Android di solito non supporta la sintassi "u + x". Quindi devi chiamare chmod 555 /data/local/myprog.

Successivamente è possibile eseguire il file eseguibile: /data/local/myprog.


Grazie per la tua risposta. In effetti il ​​problema riguardava la generazione binaria. Non veniva generato correttamente! ;)
Nuno Santos,

Ho busybox sul mio dispositivo, ma questo comando: shell @ n200C: / $ busybox cp / storage / external_storage / sda1 / ffmpeg / data / ------ show error = cp: impossibile creare '/ data / ffmpeg ': Autorizzazione negata
Dr.jacky,

tmp-mksh: /data/local/workspace/clang+llvm-5.0.0-aarch64-linux-gnu/bin/clang++: No such file or directorysebbene il file sia presente
Necktwi

/ data / local richiede l'accesso come root sul mio dispositivo. Usa invece / data / local / tmp
Chan Tzish il

10

Innanzitutto, devi inserirlo in una directory, ad esempio /data/local/tmp. Quindi, è necessario impostare l'autorizzazione per tale utilizzo chmod 755 executable. Successivamente, puoi eseguirlo come ./executable.

I passaggi completi sono i seguenti:

adb push eseguibile / data / local / tmp
shell adb
cd / data / local / tmp
eseguibile chmod 755
./executable

In alternativa, se si desidera eseguirlo dalla cartella delle risorse, è necessario copiare il file nella cartella dei dati /data/data/packagename/. Quindi, usando la Fileclasse, imposta il setExecutableflag su trueper il file ed eseguilo dalla classe Process o pacchetti di terze parti come Root Tools .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.