2015-02-21 4 views
-1

Я пытаюсь просмотреть регистр esp, чтобы понять, как происходит переполнение стека.просмотр ошибки переполнения стека

Я использовал команду x/8xw $esp для просмотра реестра, но продолжал получать ошибки Cannot access memory at 0xffffffffffffdf30. Может кто-нибудь, пожалуйста, скажите мне, в чем проблема.

Я использую Linux 3.13. Я следую приведенной ниже ссылке, чтобы понять регистры и переполнение стека. Все остальное работает отдельно от вышеупомянутой команды. В видео в 10:32 автор может отображать регистр esp, но когда я делаю это на своей машине, я не могу.

https://www.youtube.com/watch?v=RF7DF4kfs1E&index=1&list=PL118A3998B4401EC6

ответ

0

Основная проблема в том, что учебник сделан для x86 архитектур.

"Не удается получить доступ к памяти в 0xffffffffffffdf30"

0xffffffffffffdf30 является 64-битный адрес. Пока вы находитесь на 64-битной системе, вы не можете проверить регистр ESP, потому что просто нет.

Например, 64-битные системы используют эти регистры - RSP, RBP, RIP и т. Д. Эти регистры можно узнать как ESP, EBP и EIP на x86. Итак, если вы хотите продолжить этот учебник, скомпилируйте этот учебный код .c как 32bit с помощью gcc, например: gcc -m32 -o demo demo.c

+0

Привет, я пытаюсь скомпилировать программу, как вы но он дал мне ошибку, говоря, что «Undefined command: gcc». Я новичок в переполнении стека, и у меня есть ограниченное знание компьютерных архитектур и системы, поэтому я не знаю, как это сделать. Многие спасибо –

+0

@ZareenaNaz Нет проблем, просто попробуйте сделать это 'export CFLAGS = -m32' и скомпилировать его снова. Если проблема по-прежнему сохраняется, вы должны установить этот пакет libc6-dev-i386, например: 'sudo apt-get install g ++ - multilib libc6-dev-i386' при условии, что вы используете дистрибутив Ubuntu или Debian. – Yeez

+0

Hi Yeez, Спасибо за вашу помощь. К сожалению, появляются другие ошибки, когда я пытаюсь установить пакет, как вы предложили. У вас есть электронное письмо, которое у меня есть, так что я задаю вопрос через это. –