2009년 02월 13일
Buffer overflow에 의해 프로그램이 죽는 현상

다음은 Buffer overflow를 일으킬 수 있는 코드의 일부 입니다. 물론 개발자의 실수로 만든 코드입니다. 일단 한 번 보실까요 ~


#define BUF  4
#define _BUF 6


     int nArray[BUF];
     ZeroMemory(nArray, sizeof(int) * _BUF);



위 코드를 잠깐만 보시더라도 금방 문제점을 찾아 내실 수 있으실 것 입니다. nArray 배열은 int형 4개의 메모리 공간을 할당받았지만 메모리를 초기화 시켜줄때 그만 6개의 공간을 초기화 해버리고 말았습니다. 즉, Buffer overflow가 일어난 것입니다. Buffer overflow의 위험성에 대해서는 두번 세번 강조해도 전혀 지나치지 않을 정도로 심각한 문제를 야기 합니다. 예를 든다면, 위 코드에서 침범한 int형 2개의 공간에 프로그램을 운영하는데 있어서 중요한 데이터가 저장되어 있었다면 프로그램이 실행 도중 죽는 다던가 아니면 아예 실행이 안된다던가 그것도 아니면 프로그램을 종료시킬 때 어떠한 문제가 발생해서 그 동안 프로그램을 이용하면서 기록해 두었던 데이터들이 전부 날아가 버릴지도 모릅니다. 방금 든 예는 제가 이틀 전에 겪었던 현상이었습니다. 저런 실수에 대해서는 생각도 못하고 디버깅하다 결국 과장님께서 찾아주셨는데 어찌나 부끄럽던지 모릅니다.

위 내용을 간단히 그림으로 표현하면 아래와 같습니다.



by greenfrog | 2009/02/13 21:44 | C++ / WIN32 / MFC | 트랙백 | 덧글(0)
트랙백 주소 : http://greenfrog7.egloos.com/tb/1363522
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]

:         :

:

비공개 덧글



<< 이전 페이지 | 다음 페이지 >>