버퍼는 데이터를 한 곳에서 다른 곳으로 전송하는 동안 일시 보관하는 메모리 영역이다. 이 버퍼는 항상 정해진 일정 크기를 가지는데, 이 '정해진 일정 크기'를 넘는 데이터를 입력하는 현상이 바로 버퍼 오버플로이다. 따라서 버퍼 오버플로 공격은 '버퍼에 정해진 일정 크기 이상의 데이터를 입력하여 프로그램을 공격하는 행위'라고 할 수 있다. 프로그램이 사용하는 버퍼는 메모리의 스택과 힙에 존재할 수 있다. 따라서 스택에 존재하는 버퍼 공격이나, 힙에 존재하는 버퍼 공격이냐에 따라 스택 버퍼 오버플로와 힙 버퍼 오버플로로 구분한다. 먼저 스택 버퍼 오버플로 공격을 알아볼 것이다. 이 공격은 모든 경우에 가능하지 않고, 프로그래머가 취약한 특정 함수를 사용해야 가능하다. 그리하여 이론상 취약한 함수를 사용하지 ..