2010-07-27 21 views
8

/proc/$ PID/maps okurken, eşlenen bellek bölgelerini alırsınız. Bu bölgelerden birini boşaltmanın bir yolu var mı? Sen sürecine gdb ekleyebilirsinizBir işlemin belleğini dökün

$ 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]... 

Teşekkür

cevap

10

Hayır! PTRACE ATTACH ile ptrace() numaralı telefonu arayın. Daha sonra /proc/<pid>/mem'u açın, bölge ofsetini arayın ve /proc</pid>/maps'da verilen bölgenin uzunluğunu okuyun.

Burada, C içinde yapan bir program I wrote. Burada, Python'da (and the ptrace binding) bulunan module I wrote. Finiş için, program that dumps all regions of a process to files.

+0

Harika :) Çok teşekkürler – mathk

+0

Onay için teşekkürler. Bu konularda çok deneyimim var: P –

5

sonra bu birlikte konum L başlayan uzunluk x kelimelerin hafıza bölgesini dökümü: .

İşleminizi başlattığınızda gdb'yi eklemek basittir: gdb ./executable ve ardından run. Çalışmakta olan bir işleme eklemeniz gerekiyorsa, gdb'yi gdb attach pid olarak başlatın. Burada pid, önem verdiğiniz işlem kimliğidir.

+0

Teşekkürler, :) Bunu düşünmedim – mathk

+1

Bir çalışma sürecine eklemek için komut satırı bağımsız değişkenini kullanabilirsiniz: gdb -p '. –

+0

Yararlı bilgi. Uzak hedefler için sadece gdb'yi ciddiye alıyorum. – nmichaels

4

dd (1) kullanımı:

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