Chcę, jak mówi tytuł, wydrukować zawartość stosu w moim programie C.Jak mogę wydrukować zawartość stosu w programie C?
Oto kroki zrobiłem:
Zrobiłem plik prosty montaż (helper.s), który obejmował funkcję powrotu adres mojego ebp rejestru oraz funkcję powrotu Adres mojego esp zarejestrować
.globl get_esp get_esp: movl %esp, %eax ret # get_ebp is defined similarly, and included in the .globl section
- Zadzwoniłem
get_esp()
iget_ebp()
funkcji z moim programie C (fpC = get_esp();
gdzie FPC jest int) - i (z powodzeniem, jak sądzę) print ed adres moich rejestrów esp i ebp (
fprintf (stderr, "%x", fcP);
) - Próbowałem i nie udało mi się wydrukować zawartości mojego rejestru esp. (Próbowałem między innymi
fprintf (sderr, "%d", *fcP);
ifprintf (sderr, "%x", *((int *)fcP));
). Mój program generuje błąd segmentacji w środowisku wykonawczym podczas przetwarzania tego wiersza.
Co robię źle?
EDYCJA: Należy to wykonać, wywołując te funkcje zespołu, aby uzyskać wskaźniki stosu. EDIT2: Jest to zadanie domowe.
Co masz na myśli mówiąc, że się nie powiodło? Jakie wyniki uzyskałeś i czego oczekiwałeś? –
Aby wydrukować wskaźniki, musisz użyć 'printf ("% p ", (void *) (p))'. "Zawartość% esp" jest wskaźnikiem. –
@CarlNorum: Nie, użycie 'printf' jest po prostu wymagane przez standard C. (Por. "Argumenty variadyczne".) –