Переполнение буфера - почему одни работают ascii, а другие нет - PullRequest
0 голосов
/ 07 мая 2011

Извините, если этот вопрос глуп или был задан, но я не смог его найти.

У меня есть программа, в которой я пытался использовать буфер над потоком.Это простая программа, которая использует getchar () для получения ввода от пользователя.Размер буфера установлен на 12. Я могу заставить программу завершиться сбоем, набрав> 12 x или используя> 12 \ x78, но это не вызовет ошибки, если я введу сотни A или \ x41.

Любая помощь или указание в правильном направлении будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 07 мая 2011

Чтобы исключить угадывание, посмотрите код ассемблера, а затем машинные инструкции вашей программы. Запустите его в отладчике и посмотрите, что происходит в памяти. Вы можете видеть, по каким адресам в стеке размещены локальные переменные и какие регистры адресов и особенно указатель инструкций сохраняются при вызове функции.

Вы смотрели примеры типа переполнение стека в Википедии?

0 голосов
/ 07 мая 2011

0x41414141 может быть действительным адресом на текстовой странице процесса.Посмотрите на сегментную карту процесса для деталей.

...