Linux ptrace() 读取整个内存页

Linux ptrace() read whole memory page

您好,我尝试转储 Android/Linux 中进程的内存。现在我读取内存映射以获取内存区域的地址 space 然后我像这样读取每个单词:

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

指定内存地址space的start/end来读取,直接读取整个内存页有没有更高效的方案?

有两种可能的方法可以更有效地从另一个进程读取内存。

如果你的内核支持它(我不知道 Android 内核)你可以使用 process_vm_readv.

另一种方法是打开目标进程的/proc/.../mem文件并从中读取。 gdb 使用这种方法,虽然我认为只是因为 process_vm_readv 是 "new"(在 gdb 的术语中)。