进程内存转储

10
阅读/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个回答

13

5
您可以使用以下命令将gdb附加到进程并转储长度为X个字的内存区域,起始位置为L:x/Xw L
在启动进程时附加gdb很简单:gdb ./executable然后run。如果您需要附加到正在运行的进程,则启动gdb,然后gdb attach pid,其中pid是您关心的进程ID。

谢谢,:) 我还没有想过这个。 - mathk
1
你可以使用命令行参数来附加到正在运行的进程:gdb -p <pid> - Matthew Slattery
很好知道。我只严肃地用过gdb来调试远程目标。 - nmichaels

4

使用dd(1)命令:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接