본문 바로가기

스택

(2)
stack overflow 메모리 탐구. stack overflow 가 날 때 실제 메모리 주소를 찍어 보고, 그 값을 vmmap 툴과 비교해 봤다. 재귀함수(recursive fuction)를 배울 때 가장 많이 듣는 유의점이, 재귀함수는 stack overflow 를 유발할 수 있기 때문에 주의하라라는 말이다. 재귀함수를 이용하여 문제를 발생시켰다.재귀함수 내부에 지역변수를 하나 생성하였고, 그 지역변수의 주소를 찍었다. sysinternals 의 vmmap 툴은 프로세스를 선택하면 해당 프로세스의 메모리 공간의 각 부분이 어떤 영역으로 잡히는 지를 보여준다. 우리의 관심사는 stack 이고, stack은 0x00030000 ~ 0x00130000 영역에 잡혀있다. 첫번째 그림에서 찍힌 첫번째 r의 주소는 0x12ff48 스택 중에서도 윗부..
stack frame 그림. Microsoft Tech Ed 03 : Microsoft Windows Crash Dump Analysis (Mark Russinovich, David Solomon) 이라는 인터넷에서 다운받은 문서에 있는 그림.스택쓰레드 마다 한 개의 유저모드 스택과 커널모드 스택이 있다.유저모드 스택은 x86에서 보통 1MB이다.커널모드 스택은 x86에서 보통 12KB이다.스택은 중첩된 함수 호출을 가능하게 한다.패러미터가 스택을 통해 전달된다.복귀주소를 저장한다.지역변수의 저장소로 기능한다.특이한 호출규약(calling convention)을 사용하면 스택을 분석하기 어려워진다.프레임 포인터 사용 안함.레지스터를 통한 패러미터 전달 (fast calls)이 경우 디버거는 파싱을 위해 심볼정보가 필요하다.