2012-07-21 12 views
6

Estoy tratando de encontrar un cierto valor (número mágico entero (654321)) en un proceso en ejecución al que estoy actualmente conectado usando GDB. Encontré un comando find [/sn] start_addr, +len, val1 [, val2, ...], pero requiere dirección de inicio y finalización, pero no sé dónde comienza y dónde termina mi memoria de proceso.¿cómo busco toda la memoria de un proceso en gdb?

Este parece ser un problema muy común, pero recuerdo haberlo buscado en Google hace un año, y lo repetí ahora sin éxito, así que ... ¿Cómo sé dónde comienza la memoria de proceso y dónde termina?

Respuesta

4

La idea de "toda la memoria" es complicada en un proceso moderno. Lo que realmente tienes son muchas asignaciones, de diferentes fuentes. Puedes enumerarlos (asegúrate de no intentar leer desde mapas sin acceso de lectura. Además, probablemente quieras aplicar algo de inteligencia para no terminar buscando en las secciones .text de tus bibliotecas compartidas, etc.) por leyendo /proc/$pid/maps en tiempo de ejecución, y luego script algo para alimentar gdb los comandos apropiados. Honestamente, creo que sería más simple escribir una rutina en el binario para hacer esto y simplemente llamarlo desde gdb.

+0

¿Hay una página de manual que describa el formato de '/ proc/$ pid/maps'? –

+0

@Jonas: http://kernel.org/doc/man-pages/online/pages/man5/proc.5.html – mark4o

+0

@ mark4o Gracias. Intentó 'maps',' proc_maps' y 'procfs' sin éxito. –

Cuestiones relacionadas