Выполнить команду с правами суперпользователя в методе JNI в Android

1

В Java у меня может быть что-то вроде этого:

Process p = Runtime.getRuntime().exec("su");
DataOutputStream pOut = new DataOutputStream(p.getOutputStream());
pOut.writeBytes("find / -perm -2000 -o -perm -4000\n");
pOut.writeBytes("ps\n");
pOut.writeBytes("ls\n");
pOut.writeBytes("exit\n");
pOut.flush();
p.waitFor();

Я знаю, что для выполнения команды find в JNI-методе мы можем использовать функцию system или popen. Но я не знаю, как выполнить его с привилегиями su?

PS: Так как системная функция создает новый дочерний процесс. Я хочу, чтобы один дочерний процесс появлялся для выполнения нескольких команд, например, в Java.

Теги:
android-ndk
jni

3 ответа

1
Лучший ответ

Ответ Femi близок, я тестировал, для меня работает следующее:

system("su -c \"find / -perm -2000 -o -perm -4000; ps; ls\"");
2

Я не вижу смысла использовать System() для выполнения, system() не возвращает вам поток для чтения вывода.

Я думаю, вы должны попробовать popen() вместо

  • 0
    Спасибо вам и Ви Ви ответ. Вы 2 сделали мои дни :)
2

Предполагая, что на вашем Android-устройстве установлен su, и он находится на пути, вы можете попробовать его следующим образом:

system("su -c \"find / -perm -2000 -o -perm -4000\" root");

su принимает аргументы: аргумент -c указывает команду для запуска.

РЕДАКТИРОВАТЬ: вам может быть не повезло. Я не уверен, можете ли вы передать несколько команд команде su. Вы можете уйти с передачей его оболочки, а затем передать команды оболочки, но никаких гарантий нет.

system("su -c \"sh -c 'find / -perm -2000 -o -perm -4000; rm /tmp/1'\" root");
  • 0
    Пожалуйста, проверьте мои изменения, так как системная функция разветвляет новый дочерний процесс. Я хочу иметь один дочерний процесс для выполнения нескольких команд, как в Java.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню