Подтвердить что ты не робот

В чем разница между переполнением стека и переполнением буфера?

Чем отличается переполнение стека и переполнение буфера в программировании?

4b9b3361

Ответ 1

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

Переполнение буфера относится к любому случаю, в котором программа записывает за пределы памяти, выделенной для любого буфера (в том числе в куче, а не только в стеке). Например, если вы пишете за конец массива, выделенного из кучи, вы вызвали переполнение буфера.

Ответ 2

Ключевым отличием является знание разницы между стеком и буфером.

Стек - это пространство, зарезервированное для исполняемой программы для выполнения. Когда вы вызываете функцию, информация о параметре и возврате помещается в стек.

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

Ответ 3

Переполнение стека: вы поместили слишком много вещей в стек для памяти, выделенной для текущего потока

Переполнение буфера:. Вы превысили размер вашего текущего выделенного буфера и не изменили его размер (или не можете изменить его размер).

Ответ 5

Переток stackoverflow - это когда размер стека для потока превышает максимально допустимый размер стека для этого потока.

Переполнение буфера - это когда значение записывается в память, которая в настоящее время не выделяется программой.

Ответ 6

Переполнение буфера обычно означает, что в любой момент времени доступ к буферу памяти осуществляется за пределами его границ, будь то стек или куча. Переполнение стека означает, что стек превысил установленный лимит, а на большинстве машин/ОС работает над кучей.

Ответ 7

Разве вы не хотите сказать "в чем разница между стеком и буфером?" - это приведет вас к более глубокому пониманию. Как только вы достигли этого, вы можете подумать о том, что означает переполнение каждой из этих вещей.

Ответ 8

1. Переполнение буфера на основе стека  • Происходит, когда программа записывает на адрес памяти в стеке вызовов программ за пределами предполагаемой структуры данных - буфер фиксированной длины. • Характеристики программирования на основе стека   1. "Стек" - это пространство памяти, в котором выделяются автоматические переменные.   2. Функциональные параметры выделяются в стеке и не инициализируются системой автоматически, поэтому они имеют мусор, пока они не будут инициализированы.   3. Как только функция завершила свой цикл, ссылка на переменную в стеке удаляется. (т.е. если функция вызывается несколько раз, ее локальные переменные и параметры воссоздаются и уничтожаются при каждом вызове функции и выходе).
• Атакующий использует переполнение буфера на основе стека, чтобы манипулировать программой различными способами, перезаписывая 1. Локальная переменная, которая находится рядом с буфером в памяти в стеке, чтобы изменить поведение программы, которая может принести пользу злоумышленнику.
2. Обратный адрес в фрейме стека. Как только функция вернется, выполнение возобновится на обратном адресе, как указано злоумышленником, обычно это заполненный пользователем входной буфер. 3. Указатель функции или обработчик исключений, который впоследствии выполняется. • Факторы для преодоления подвигов -  1. Нулевые байты в адресах  2. Изменчивость в расположении кода оболочки  3. Различия между средой. Код оболочки - это небольшой фрагмент кода, используемый при эксплуатации уязвимости программного обеспечения.

2. Переполнение буфера переходов

• Происходит в области данных кучи. • Переполнение происходит, когда приложение копирует больше данных в буфер, чем буфер, который должен был содержать. • Уязвим к эксплуатации, если он копирует данные в буфер без предварительной проверки того, что источник поместится в пункт назначения. • Характеристики программирования на основе стека и кучи: • "Куча" - это "свободный магазин", который является пространством памяти, когда выделяются динамические объекты. • Куча - это пространство памяти, динамически распределенное функции new(), malloc() и calloc().  • Динамически созданные переменные (т.е. объявленные переменные) создаются в куче перед выполнением и сохраняются в памяти до тех пор, пока жизненный цикл объекта не завершится. • Выполняется эксплуатация    • Коррумпируйте данные для переопределения внутренних структур, таких как указатели связанных списков.    • Обмен указателями для переопределения функции программы

Ответ 9

Большинство людей, которые упоминают переполнение буфера, представляют собой стеки. Однако переполнение может происходить в любой области, которая не ограничивается стеком. Например, куча или bss. Переполнение стека ограничено переписыванием адресов возврата в стеке, но нормальное переполнение, которое не перезаписывает обратный адрес, вероятно, просто перезапишет другие локальные переменные.