본문 바로가기

프로그래밍/미분류

stack overflow 메모리 탐구.

반응형

stack overflow 가 날 때 실제 메모리 주소를 찍어 보고, 그 값을 vmmap 툴과 비교해 봤다.



재귀함수(recursive fuction)를 배울 때 가장 많이 듣는 유의점이, 재귀함수는 stack overflow 를 유발할 수 있기 때문에 주의하라라는 말이다. 재귀함수를 이용하여 문제를 발생시켰다.

재귀함수 내부에 지역변수를 하나 생성하였고, 그 지역변수의 주소를 찍었다.


sysinternals 의 vmmap 툴은 프로세스를 선택하면 해당 프로세스의 메모리 공간의 각 부분이 어떤 영역으로 잡히는 지를 보여준다. 우리의 관심사는 stack 이고, stack은 0x00030000 ~ 0x00130000 영역에 잡혀있다. 첫번째 그림에서 찍힌 첫번째 r의 주소는 0x12ff48 스택 중에서도 윗부분에 가까운 주소를 나타내고 있다.

한참 진행하면, 찍히는 주소값이 점점 작아지고, 0x335e8 까지 찍고 프로그램이 죽어버린다.


디버거를 실행하고, 예외 종류를 보면, Stack overflow. 죽은 후의 스택 부분 메모리를 보면, 비슷한 형태의 패턴이 반복되고 있음(당연하게도)을 관찰할 수 있다.


728x90