Дамп памяти процесса - PullRequest
       23

Дамп памяти процесса

8 голосов
/ 27 июля 2010

При чтении / 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 ]

12 голосов
/ 27 июля 2010

Нах! Звоните ptrace() с PTRACE ATTACH. Затем откройте /proc/<pid>/mem, найдите смещение региона и прочитайте длину региона, как указано в /proc</pid>/maps.

Вот программа , которую я написал , которая делает это на C. Вот модуль , который я написал , который делает это на Python ( и привязка ptrace ). Наконец, программа , которая выводит все области процесса в файлы .

Наслаждайтесь!

5 голосов
/ 27 июля 2010

Вы можете присоединить GDB к процессу, а затем вывести область памяти длиной X слов, начиная с местоположения L, с помощью: x/Xw L.

Присоединение GDB при запуске вашего процесса простое: gdb ./executable затем run.Если вам необходимо подключиться к запущенному процессу, запустите gdb, а затем gdb attach pid, где pid - это идентификатор процесса, который вам нужен.

4 голосов
/ 27 июля 2010

Использование дд (1):

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