0

所以我试图使用 memfetch 从我的三星 Galaxy Nexus 中转储特定进程的内存。

我从 http://lcamt​​uf.coredump.cx/ 下载了memfetch

使用以下命令提取其内容:

tar -xvf memfetch.tgz

在我的memfetchls目录上运行:

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 可执行表,理想情况下从那里运行它:

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,我总是遇到同样的错误。我什至尝试了各种标志组合,但没有一个有效:(

感谢您提供任何高级帮助,如果需要任何其他信息,请告诉我。

4

1 回答 1

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]);

于 2014-06-07T03:23:13.470 回答