我正在尝试使用 netcat 转储 Android 设备的分区。我创建了 3 个 bash 脚本来支持该过程。我在第二个脚本中遇到了麻烦,即通过 netcat 转储特定分区。在命令行上,我曾经输入以下命令:
- adb shell
- 苏
- (在根目录) dd if=/dev/block/mmcblk0 | /sdcard/nc -l -p 8888
根据上述命令,我尝试编写一个 bash 脚本,详细信息如下:
#!/bin/bash
adb shell "su
dd if=/dev/block/mmcblk0 | /dev/examiner/nc -l -p 8888"
但结果却是文本文件,大小为零。我尝试更改用于标识变量的引号,但结果仍然相同。
提前致谢。
答案1
#!/bin/bash
adb shell "su
dd if=/dev/block/mmcblk0 | /dev/examiner/nc -l -p 8888"
问题是,这样管道就在非特权adb
shell 中执行,而不是在由 生成的 root shell 中su
执行;这导致管道在没有 root 权限的情况下执行,并且文件长度为 0(可能是由于命令if
无法在没有 root 权限的情况下读取块设备)。
su
使用su
选项直接在生成的 root shell 中运行命令-c
,该选项允许直接在生成的 shell 中运行命令:
#!/bin/bash
adb shell "su -c 'dd if=/dev/block/mmcblk0 | /dev/examiner/nc -l -p 8888'"