Desidero, come dice il titolo, stampare il contenuto della pila nel mio programma C.Come posso stampare il contenuto dello stack nel programma C?
Questi sono i passi che ho preso:
Ho fatto un file di semplice assemblaggio (helper.s) che includeva una funzione per restituire l'indirizzo del mio registro EBP e una funzione per restituire l'indirizzo del mio esp registrare
.globl get_esp get_esp: movl %esp, %eax ret # get_ebp is defined similarly, and included in the .globl section
- ho chiamato il
get_esp()
eget_ebp()
funzioni dal mio programma C (fpC = get_esp();
dove FPC è un int) - i (con successo, credo) di stampa editore l'indirizzo dei miei registri esp e ebp (
fprintf (stderr, "%x", fcP);
) - Ho provato, e ho fallito, a stampare il contenuto del mio registro esp. (Ho provato
fprintf (sderr, "%d", *fcP);
efprintf (sderr, "%x", *((int *)fcP));
, tra gli altri metodi). Il mio programma raggiunge un errore di segmentazione in fase di esecuzione quando questa riga viene elaborata.
Cosa sto sbagliando?
MODIFICA: È necessario eseguire questa operazione richiamando queste funzioni di assieme per ottenere i puntatori dello stack. EDIT2: questo è un compito a casa.
Cosa intendi quando dici di aver fallito? Che risultato hai ottenuto e cosa ti aspettavi? –
Per stampare i puntatori, è necessario usare 'printf ("% p ", (void *) (p))'. Il "contenuto di% esp" è un puntatore. –
@CarlNorum: No, l'uso di 'printf' è semplicemente richiesto dallo standard C. (Cfr. "Argomenti variadici".) –