User Tools

Site Tools


obtener_un_volcado_de_la_memoria_mapeada_por_un_proceso

This is an old revision of the document!


Volcado de la memoria usada por un proceso usando Bash

Esta función en bash hace un volcado mediante “dd” en “/proc/PID/maps” para obtener todo lo que el proceso tiene mapeado a memoria. Este archivo hace referencia a una parte de lo denominado memoria virtual (mmap), contiendo las regiones de memoria actualmente asignadas. Los campos de ese archivo son “address” ,“perms”, “offset”, “dev”, “inode” y “pathname”.

A continuación se muestra la función en bash para realizar el volcado de memoria de un proceso sin incluir las librerías compartidas o ficheros mapeados a disco. Para ello usamos las entradas del fichero maps con el valor de inodo “ 0 ”, que indica que no hay ningún inodo asociado a la región de memoria. Obtenemos todas las regiones y mediante dd se extraen en el directorio donde se ejecute el comando. Los ficheros tendrán el prefijo del PID:mem_ y posteriormente la región de memoria y la extensión .bin. Para leer dichos ficheros binarios se puede usar xxd o el comando strings.

Volcado de memoria de múltiples PIDs usando pidof.

procdump()
(                                                                                  
for g in `pidof $1`
do
    cat /proc/${g[@]}/maps | grep " 0 " | awk '{print $1}' | ( IFS="-"
    while read a b; do
        dd if=/proc/${g[@]}/mem bs=$( getconf PAGESIZE ) iflag=skip_bytes,count_bytes skip=$(( 0x$a )) count=$(( 0x$b - 0x$a )) of="${g[@]}_mem_$a.bin"
    done )
done
)
# Forma de uso.
procdump mysqld

Volcado de memoria de un PID en concreto.

procdump()
( 
    cat /proc/$1/maps | grep " 0 " | awk '{print $1}' | ( IFS="-"
    while read a b; do
        dd if=/proc/$1/mem bs=$( getconf PAGESIZE ) iflag=skip_bytes,count_bytes skip=$(( 0x$a )) count=$(( 0x$b - 0x$a )) of="$1_mem_$a.bin"
    done )
)
# Forma de uso.
procdump 3456

Enlaces de interés: mostrar_memoria_real_utilizada_por_un_proceso

obtener_un_volcado_de_la_memoria_mapeada_por_un_proceso.1659466571.txt.gz · Last modified: 2022/08/02 20:56 by busindre