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