Я хочу, как говорится в заголовке, распечатать содержимое стека в моей программе на C.Как распечатать содержимое стека в программе C?
Вот шаги, которые я взял:
Я сделал файл простого монтажа (helper.s), который включает функцию, чтобы вернуть адрес моего EBP регистра и функцию возвращает адрес моих особ регистр
.globl get_esp get_esp: movl %esp, %eax ret # get_ebp is defined similarly, and included in the .globl section
- Я назвал
get_esp()
иget_ebp()
функции из моей программы C (fpC = get_esp();
где FPC является Int) - I (успешно, я думаю) печать (
fprintf (stderr, "%x", fcP);
) - Я попробовал и не смог распечатать содержимое моего регистра esp. (Я пробовал
fprintf (sderr, "%d", *fcP);
иfprintf (sderr, "%x", *((int *)fcP));
, среди прочих методов). Моя программа поражает ошибку сегментации во время выполнения, когда эта строка обрабатывается.
Что я делаю неправильно?
EDIT: Это должно быть выполнено путем вызова этих функций сборки, чтобы получить указатели стека. EDIT2: Это домашнее задание.
Что вы имеете в виду, когда говорите, что это не удалось? Какой результат вы получили и чего вы ожидали? –
Для печати указателей вы должны использовать 'printf ("% p ", (void *) (p))'. «Содержание% esp» является указателем. –
@CarlNorum: Нет, использование 'printf' просто определяется стандартом C. (См. «Variadic arguments».) –