*nix环境用户态memdump的几种方案

在*nix环境用户态对任意进程进行memdump,普适方案是:

从程序员角度看,有这么几种方案:


a)

这可能是最古老的方案,效率最差,但兼容性最好。

waitpid确保目标进程STOP。在PTRACE_DETACH之前不需要显式PTRACE_CONT,PTRACE_DETACH之后目标进程会自动CONT。


b)

为了打开/proc/[pid]/mem,需要PTRACE_ATTACH,仅仅”kill -SIGSTOP”是不够的。lseek需要处理”32-bits程序访问文件0x80000000及以上偏移”的问题。


c)

pread代替了lseek+read。在多线程编程中建议使用pread/pwrite,它们不会改变read/write用到的文件I/O偏移。


d)

自从Linux 3.2 (2012.1)及glibc 2.15 (2012.3)始,可以用使用上述API,此时不需要事先PTRACE_ATTACH,也不要求目标进程STOP。有点类似Windows上的ReadProcessMemory/WriteProcessMemory。

这个办法需要注意内核版本是否适用。


不管用哪种办法,都只需要gcc,不需要复杂的SDK之流。Android就当它是Linux,当你看到某个Android上的memdump.c需要NDK才能编译,纯属扯淡。

 

文章分类:未分类.
转载声明:请注明 “转自绿盟科技博客”:.
文章收录:

发表评论