본문 바로가기
System/Windows

Windows에서의 스택 할당

by bbolmin 2013. 12. 28.




프로그램이 사용하는 스택 영역은 스레드가 생성되는 단계에서 만들어진다. 




[ 초기 ]


high

 ...

...

 Committed Page

 Guard Protection Page

 Reserved Page

 ...

 ...

low



[*] 윈도우즈에서는 스레드 생성시 디폴트로 1MByte의 메모리를 Reserved Page로 놓는다.

여기서 1개의 페이지(4KByte)만을 실제 메모리와 매핑된 Committed Page로 두고 그 다음 페이지를 Guard Page로 놓는다.





[ 늘어나는 Committed Page ]


high

 ...

...

 Committed Page

 Guard Protection Page

 Reserved Page

 ...

 ...

low



[*] 스택을 사용하여 스레드가 Committed Page를 초과하여 사용할 때 Guard Page에 접근하게 되고 이 때 Guard Page를 Committed Page로 바꿔주며 Guard Page는 한 페이지 아래로 내려간다.


- 동작 원리는 Guard Page에 접근하게되면 페이지 폴트가 발생하고 해당 메모리가 스택 영역이였다면 ZwAllocateVirtualMemory를 호출하여 4KB를 할당해준다. 또 TIB의 StackLimit 값을 4KB 증가시킴으로써 현재까지 Commit된 스택 사이즈를 증가시켜준다.





[마지막 부분]


high

 ... 

...

 Committed Page

 Reserved Page

...

...

















[*] 마지막 페이지는 Guard Page가 내려오더라도 예약된 스택 영역을 벗어나지 않게 하기 위해서 항상 Reserved Page로 둔다.











ref - Windows 구조와 원리 (OS를 관통하는 프로그래밍의 원리)




'System > Windows' 카테고리의 다른 글

[CVE-2012-4792]  (0) 2014.08.15
pydbg로 Fuzzer 만들기  (0) 2014.04.27
FileFuzz, Peach Fuzzer 링크  (0) 2013.11.12
메모리 보호 기법 DEP/NX  (1) 2012.09.05
windows bof [basic stack overflow]  (2) 2012.04.08