【发布时间】:2015-12-23 10:21:46
【问题描述】:
您好,我尝试在 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);
难道没有更高效的解决方案,通过指定要读取的内存地址空间的开始/结束来直接读取整个内存页面?
【问题讨论】:
-
您到底想达到什么目的?通过读取“文件”
/proc/pid/mem可以完成进程的完整转储 -
我想要所有可写内存页的转储。我现在使用 open、lseek 和 read 实现了堆转储。但是当我尝试访问堆栈等其他内存区域时,仍然会出现 I/O 错误。
标签: android c++ c linux ptrace