Memory Dump

Mannual process

It is possible to read application memory by executing the following commands given the application's PID:

cat /proc/[pid]/maps

The output is something like the following

00400000-00421000 r-xp 00000000 08:01 592398     /usr/libexec/dovecot/pop3-login
00621000-00622000 rw-p 00021000 08:01 592398     /usr/libexec/dovecot/pop3-login
00622000-0066a000 rw-p 00622000 00:00 0          [heap]
3e73200000-3e7321c000 r-xp 00000000 08:01 229378 /lib64/ld-2.5.so
3e7341b000-3e7341c000 r--p 0001b000 08:01 229378 /lib64/ld-2.5.so

the rows can contain different types of information depending on their access permissions:

  • r-xp: application code loaded in memory

  • rw-p: readable and writable memory area

  • r--p: read only memory area

To dump the actual contents of the memory area use gdb passing as parameters the output file and the address ranges (the first two row values printed by cat /proc/[pid]/maps)

gdb

gdb --pid [pid]
(gdb) dump memory <output> <start addr> <end addr>

dd

dd if=/proc/<PID>/mem bs=4096 iflag=skip_bytes,count_bytes skip=<start addr> count=$(( <end addr> - <start addr> )) of="<output file>"

Last updated