Linux ptrace()读取整个内存页面

时间:2015-12-23 10:21:47

标签: android c++ c linux ptrace

您好我尝试在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);

通过指定要读取的内存地址空间的开始/结束,是否有更高效的解决方案直接读取整个内存页?

1 个答案:

答案 0 :(得分:1)

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

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

另一种方法是打开目标进程的/proc/.../mem文件并从中读取。 gdb使用这种方法,但我认为只是因为process_vm_readv是“新的”(用gdb的术语来说)。