Quiero, como dice el título, imprimir el contenido de la pila en mi programa C.¿Cómo puedo imprimir el contenido de la pila en el programa C?
Estos son los pasos que di:
hice un archivo de ensamblaje sencillo (helper.s) que incluye una función para devolver la dirección de mi registro ebp y una función para devolver la dirección de mi registro ESP
.globl get_esp get_esp: movl %esp, %eax ret # get_ebp is defined similarly, and included in the .globl section
- me llamó el
get_esp()
yget_ebp()
funciones de mi programa en C (fpC = get_esp();
donde FPC es un int) - I (con éxito, creo) de impresión ed la dirección de mis registros esp y ebp (
fprintf (stderr, "%x", fcP);
) - Intenté, y no pude, imprimir los contenidos de mi registro esp. (Intenté
fprintf (sderr, "%d", *fcP);
yfprintf (sderr, "%x", *((int *)fcP));
, entre otros métodos). Mi programa alcanza un error de segmentación en el tiempo de ejecución cuando se procesa esta línea.
¿Qué estoy haciendo mal?
EDITAR: Esto se debe realizar llamando a estas funciones de ensamblaje para obtener los punteros de pila. EDIT2: Esta es una tarea de tarea.
¿A qué te refieres cuando dices que falló? ¿Qué producción obtuviste y qué esperabas? –
Para imprimir punteros, debe usar 'printf ("% p ", (void *) (p))'. El "contenido de% esp" es un puntero. –
@CarlNorum: No, el uso de 'printf' es simplemente obligatorio según el estándar C. (Cf. "argumentos variados"). –