El volcado del núcleo es solo el volcado de la huella de memoria de sus programas, si sabe dónde estaba todo, podría usarlo.
Utiliza el ejecutable porque explica dónde (en términos de direcciones lógicas) se encuentran las cosas en la memoria, es decir, el archivo central.
Si usa un comando objdump
, volcará los metadatos sobre el objeto ejecutable que está investigando. Usando un objeto ejecutable llamado a.out como ejemplo.
objdump -h a.out
voltea solo la información del encabezado, verá secciones llamadas eg. .data o .bss o .text (hay muchos más). Estos informan al cargador del núcleo dónde se pueden encontrar varias secciones en el objeto y en qué parte del espacio de direcciones del proceso se debe cargar la sección, y para algunas secciones (por ejemplo, .data .text), qué se debe cargar. (La sección .bss no contiene ningún dato en el archivo, pero se refiere a la cantidad de memoria que se debe reservar en el proceso para datos no inicializados, se llena con ceros).
El diseño del archivo de objeto ejecutable se ajusta a un estándar, ELF.
objdump -x a.out
- tira todo
Si el objeto ejecutable todavía contiene sus tablas de símbolos (no se ha eliminado, man strip
y solía -g
generar una generación de depuración para gcc
asumir la compilación de la fuente de CA), puede examinar el contenido principal por nombres de símbolos, por ejemplo, si tenía una variable / buffer llamado inputLine en su código fuente, puede usar ese nombre gdb
para ver su contenido. es decir gdb
, conocería el desplazamiento desde el inicio del segmento de datos inicializado de sus programas donde comienza inputLine y la longitud de esa variable.
Lecturas adicionales Artículo 1 ,
Artículo 2 y para la especificación del formato ejecutable y de enlace (ELF) .
Actualización después del comentario de @mirabilos a continuación.
Pero si usa la tabla de símbolos como en
$ gdb --batch -s a.out -c core -q -ex "x buf1"
Produce
0x601060 <buf1>: 0x72617453
y luego no usar la tabla de símbolos y examinar la dirección directamente en,
$ gdb --batch -c core -q -ex "x 0x601060"
Produce
0x601060: 0x72617453
He examinado la memoria directamente sin usar la tabla de símbolos en el segundo comando.
También veo que la respuesta de @ user580082 agrega más explicaciones y votará positivamente.