【问题标题】:Android strace (or any linux binary) executionAndroid strace(或任何 linux 二进制文件)执行
【发布时间】:2012-02-23 20:21:19
【问题描述】:

我有一个问题可能很容易解决,但我似乎找不到答案。

我正在尝试对 Android 设备上运行的不同进程执行 strace。我通过将 strace 二进制文件复制到 /system/xbin (就像模拟器一样)成功地做到了这一点,并且工作得很好。我的问题是我通过引导加载程序复制了二进制文件,我不希望用户必须通过它。

所以我发现了这个很棒的教程来从应用程序中运行二进制文件:

http://gimite.net/en/index.php?Run%20native%20executable%20in%20Android%20App

我按照教程进行操作:

  • 将strace的二进制文件复制到/data/data/com.mypackage
  • 将执行权限更改为二进制文件(我也尝试过 777)
  • 尝试用

    执行它

    进程进程 = Runtime.getRuntime().exec("/data/data/com.mypackage/strace -p PID -o /sdcard/folder_I_know_it_works");

我知道该命令是正确的,因为当我从 /xbin/system 执行它时,它可以完美运行。当我运行从我的应用程序中复制的那个时,我得到空输出。我只为我自己的进程获得正确的输出,所以我知道这是一个权限问题。

当然,我还没有提到我对我的应用程序拥有 root 权限。我还尝试将 strace 二进制文件的所有者更改为 root:root 和 system:system,什么都没有。

总结一下:我需要在从应用程序复制到手机内存的二进制文件上获得与在 /xbin/strace 上找到的二进制文件相同的权限

我做错了什么?

另一个好的解决方案是找到一种方法,将 strace 从具有 root 权限的应用程序中复制到 /system/xbin。有什么想法吗?

提前非常感谢!

【问题讨论】:

    标签: android linux binary execute strace


    【解决方案1】:

    找到这个问题的答案,以防它对其他人有用。

    Process process = Runtime.getRuntime().exec("su");
    OutputStream os;
    os = process.getOutputStream();
    os.write("your linux command here".getBytes());
    os.close();
    

    您基本上只是将 su 作为一个进程运行并通过其输出流发送命令。

    稍后你可能想调用 process.wait()

    【讨论】:

      猜你喜欢
      • 2013-12-02
      • 2010-11-19
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2018-09-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多