2010-07-27 28 views
8

Al leer los mapas/proc/$ PID/maps obtendrá las regiones de memoria asignadas. ¿Hay alguna manera de volcar una de estas regiones?Memoria de volcado de un proceso

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

Gracias

Respuesta

10

nah! Llame al ptrace() con PTRACE ATTACH. A continuación, abra /proc/<pid>/mem, busque el desplazamiento de la región y lea la longitud de la región como figura en /proc</pid>/maps.

Aquí hay un program I wrote que lo hace en C. Aquí hay un module I wrote que lo hace en Python (and the ptrace binding). Para el final, un program that dumps all regions of a process to files.

¡Disfrútalo!

+0

Cool :) Muchas gracias – mathk

+0

Gracias por el tic. Tengo mucha experiencia en esto: P –

5

Puede adjuntar gdb al proceso luego volcar región de memoria de las palabras x longitud a partir de la ubicación L con esto: .

La conexión de gdb cuando comienza su proceso es simple: gdb ./executable luego run. Si necesita conectarse a un proceso en ejecución, inicie gdb luego gdb attach pid donde pid es la ID de proceso que le interesa.

+0

Gracias, :) No lo he pensado – mathk

+1

Puede usar un argumento de línea de comando para adjuntarlo a un proceso en ejecución: 'gdb -p '. –

+0

Bueno saber. Solo he usado gdb en serio para objetivos remotos. – nmichaels

4

Usando dd (1):

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