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