【问题标题】:Execute a command with superuser permission in JNI method in Android在Android的JNI方法中执行具有超级用户权限的命令
【发布时间】:2012-09-18 01:57:59
【问题描述】:

在 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();

我知道要执行JNI方法中的find命令,我们可以使用systempopen函数。但是不知道怎么用su权限执行?

PS:由于系统函数fork了一个新的子进程。我希望生成一个子进程来执行多个命令,例如在 Java 中。

【问题讨论】:

    标签: android c android-ndk java-native-interface


    【解决方案1】:

    我不明白您使用 system() 执行的意义何在,system() 不会返回流以读取输出。

    我认为你应该试试 popen()

    【讨论】:

    • 感谢您和 Vi Vi 的回答。你 2 成就了我的日子 :)
    【解决方案2】:

    假设您的 Android 设备上安装了 su 并且它在路径中,您可以这样尝试:

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

    su 接受参数:-c 参数指定要运行的命令。

    编辑:你可能在那里不走运。我不确定您是否可以将多个命令传递给su 命令。你可能会通过传递一个 shell 然后传递那个 shell 命令而侥幸成功,但不能保证。

    system("su -c \"sh -c 'find / -perm -2000 -o -perm -4000; rm /tmp/1'\" root");
    

    【讨论】:

    • 请检查我的编辑,因为系统函数派生了一个新的子进程。我希望生成一个子进程来执行多个命令,例如在 Java 中。
    【解决方案3】:

    Femi 的答案很接近,我已经测试过,以下对我有用:

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

    【讨论】:

      猜你喜欢
      • 2013-07-02
      • 2014-08-26
      • 1970-01-01
      • 2016-04-20
      • 2017-08-05
      • 2020-05-22
      • 2023-03-23
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多