9

读取 /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]...

谢谢

4

3 回答 3

14

不!ptrace()用调用PTRACE ATTACH。然后打开/proc/<pid>/mem,寻找区域偏移量,并读取 中给出的区域长度/proc</pid>/maps

这是我用 C 编写的一个程序。这是我用 Python编写的一个模块(以及 ptrace 绑定)。最后,一个将进程的所有区域转储到文件的程序

享受!

于 2010-07-27T14:01:26.773 回答
5

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

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

于 2010-07-27T10:26:52.157 回答
4

使用 dd(1):

sudo dd if=/dev/mem bs=1 skip=$(( 16#0059e000 - 1 )) \
        count=$(( 16#005b1000 - 16#0059e000 + 1)) | hexdump -C
于 2010-07-27T13:36:39.663 回答