Отличие между буферным переполнением, перебором буфера и переполнением стека заключается в характере происходящих процессов:
- Переполнение буфера (buffer overflow) происходит, когда пытаются поместить в массив больше элементов, чем он способен содержать. tproger.ru Другими словами, речь идёт о записи. tproger.ru
- Перебор буфера (buffer overrun) возникает, когда выполняют перебор элементов в буфере, выходя за его границы. tproger.ru Иными словами, речь идёт о чтении. tproger.ru
- Переполнение стека (stack overflow) происходит, когда стек выполнения разрастается за пределы выделенной для него памяти. stackoverflow.com Например, если вызвать функцию, которая рекурсивно вызывает себя без завершения, то произойдёт переполнение стека, так как каждый вызов функции создаёт новую рамку стека и стек в итоге потребляет больше памяти, чем для него выделено. stackoverflow.com
Таким образом, переполнение стека отличается от переполнения буфера и перебора буфера тем, что оно связано с разными процессами: переполнением стека — с управлением выполнением программы, переполнением буфера — с записью и чтением данных, а перебор буфера касается только чтения.