所以我正在尝试使用memfetch从三星Galaxy Nexus中转储特定进程的内存。
下载了memfetch使用以下命令提取其内容:
tar -xvf memfetch.tgz
在我的memfetch目录中运行ls
:
ls
COPYING Makefile memfetch.c mffind.pl README
在这个阶段,我应该运行make命令来获取我的memfetch可执行文件。
编辑memfetch.c
文件,我删除了#include page.h
行
首先,我使用以下命令下载了Android ARM架构。这是针对memfetch的静态交叉编译:
apt-get install gcc-arm0-linux-gnueabi
然后我在以下区域编辑了Makefile
:
FILE = memfetch
CFLAGS = -Wall -09 -static
CC = arm-linux-gnueabi-gcc
如此成功,我有了我的memfetch可执行文件:
make
arm-linux-gnueabi-gcc -Wall -09 -static memfetch.c -o memfetch
ls
COPYING Makefile memfetch memfetch.c mffind.pl README
然后我将memfetch可执行文件推送到我的Android手机中:
adb push memfetch /sdcard/memfetch
现在从这里我用手机做事了。我跑了执行adb shell
命令并创建了一个目录来存储memfetch exectable,理想情况是从那里运行它:
adb shell
su
cd /sdcard
mkdir tmp
mount -t tmpfs tmpfs tmp
cp memfetch tmp
cd tmp
chmod 6755 memfetch
现在问题来了。当我执行memfetch时,我收到以下错误:
./memfetch 1197
memfetch 0.05b by Michal Zalewski <lcamtuf@coredump.cx>
Usage ./memfetch [ -sawn ] [ -S xxx ] PID
-s - wait for fault signal before generating a dump
-a - skip non-anonymous maps (libraries etc)
-w - write index file to stdout instead of mfetch.lst
-m - avoid mmap(), helps to prevent hanging on some 2.2 boxes
-S xxx - dump segment containing address xxx (hex) only
无论我试图转储什么PID,我总是得到同样的错误。我甚至试过各种旗帜组合,但没有一个工作:(
感谢您提供高级帮助,如果需要任何其他信息,请与我们联系。
答案 0 :(得分:0)
这是因为Windows命令行的愚蠢,使得一些空字符成为linux命令的输入。
解决方案是,如果你不使用其他输入“samwS”注释这一行,
while ((opt=getopt(argc,(void*)argv, "+samwS:h"))!=EOF)
switch(opt) {
case 's': waitsig=1; break;
case 'a': skipmap=1; break;
case 'w': textout=1; break;
case 'm': avoid_mmap=1; break;
case 'S': if (sscanf(optarg,"%x",&onlyseg)!=1)
fatal("Incorrect -S syntax (hex address expected).\n");
break;
default: usage(argv[0]);
}
你使用它们只是评论
default: usage(argv[0]);