Linux ptrace()读取整个内存页

Linux ptrace() read whole memory page

本文关键字:内存 读取 ptrace Linux      更新时间:2023-10-16

你好,我试图在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);

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

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

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

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