您好我尝试在Android / Linux中转储进程的内存。现在我读取内存映射以获取内存区域的地址空间,然后我读取每个单词,如下所示:
ptrace(PTRACE_ATTACH, pid, NULL, NULL);
wait(NULL);
read each word in this memory region:
word = ptrace(PTRACE_PEEKDATA, pid, (void *)address, NULL);
ptrace(PTRACE_CONT, pid, NULL, NULL);
ptrace(PTRACE_DETACH, pid, NULL, NULL);
通过指定要读取的内存地址空间的开始/结束,是否有更高效的解决方案直接读取整个内存页?
答案 0 :(得分:1)
有两种方法可以更有效地从另一个进程读取内存。
如果您的内核支持它(我不知道Android内核),您可以使用process_vm_readv
。
另一种方法是打开目标进程的/proc/.../mem
文件并从中读取。 gdb使用这种方法,但我认为只是因为process_vm_readv
是“新的”(用gdb的术语来说)。