转储进程的内存

时间:2010-07-27 09:43:09

标签: c linux bash memory-dump

当读取/ proc / $ PID / maps时,您将获得映射的内存区域。 是否可以倾倒其中一个地区?

$ cat /proc/18448/maps
...[snip]...
0059e000-005b1000 r-xp 00000000 08:11 40         /usr/local/lib/libgstlightning.so.0.0.0
005b1000-005b2000 r--p 00012000 08:11 40         /usr/local/lib/libgstlightning.so.0.0.0
005b2000-005b3000 rw-p 00013000 08:11 40         /usr/local/lib/libgstlightning.so.0.0.0
...[snip]...

由于

3 个答案:

答案 0 :(得分:12)

罗!使用PTRACE ATTACH致电ptrace()。然后打开/proc/<pid>/mem,搜索区域偏移量,并读取/proc</pid>/maps中给出的区域长度。

以下是用C语言表达的program I wrote。这是module I wrote用Python(and the ptrace binding)完成的。完成后,program that dumps all regions of a process to files

享受!

答案 1 :(得分:5)

您可以将gdb附加到进程,然后转储从位置L开始的长度为X的内存区域,其中包含:x/Xw L

启动流程时附加gdb非常简单:gdb ./executable然后run。如果您需要附加到正在运行的进程,请启动gdb然后gdb attach pid其中pid是您关心的进程ID。

答案 2 :(得分:4)

使用dd(1):

sudo dd if=/dev/mem bs=1 skip=$(( 16#0059e000 - 1 )) \
        count=$(( 16#005b1000 - 16#0059e000 + 1)) | hexdump -C