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 的术语中)。
您好,我尝试转储 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 的术语中)。