代码之家  ›  专栏  ›  技术社区  ›  mathk

转储进程的内存

  •  8
  • mathk  · 技术社区  · 14 年前

    在读取/proc/$PID/映射时,您会得到映射的内存区域。 有没有办法把这些地区的垃圾倾倒掉?

    $ 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 回复  |  直到 11 年前
        1
  •  14
  •   Matt Joiner    8 年前

    不!呼叫 ptrace() 具有 PTRACE ATTACH /proc/<pid>/mem ,查找区域偏移,并读取中给定的区域长度 /proc</pid>/maps .

    program I wrote 在C语言中是这样的。这里有一个 module I wrote and the ptrace binding program that dumps all regions of a process to files .

    好好享受!

        2
  •  5
  •   nmichaels    14 年前

    您可以将gdb附加到进程,然后从位置L开始转储长度为X个字的内存区域,如下所示: x/Xw L

    gdb ./executable 然后 run . 如果需要连接到正在运行的进程,那么启动gdb gdb attach pid 其中pid是您关心的进程ID。

        3
  •  4
  •   jackIT    14 年前

    使用dd(1):

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