Пример:
Массив на char [10] элементов, ты запихиваешь туда 20-ть. Например 'B'.
Стек выглядит так: [наш массив 10 элементов][EIP]
EIP (4 байта) - так называемый адрес возврата.
Когда мы записали 20-ть элементов, буффер переполнился -> т.е. значение EIP перепишется, в нем теперь будет находится 0x42424242.
Теперь когда функция попытается вернуть управление, EIP востанавливается из стека и управление передастся
коду по адрессу 0x42424242 -> отсюда и появляется segmentation fault.
Посмотри в нете, там очень много на эту тему написанно

void.ru - есть статьи по написанию эксплоитов и там очень доходчиво все объясняется