프로그램의 스택이란?
옛날 게시글에서 잠깐 설명했겠지만 스택에는 지역변수, 함수에 들어갈 인자 등 프로그램 실행중에 이것저것 저장하는 공간이다. 스택구조로 적재되고 소멸되기에 스택이라는 이름이 붙은 것으로 추측된다.
스택 프레임이란?
스택에는 지역변수가 저장된다. 즉 각 함수에서 쓰이는 지역변수는 함수 안에서만 쓰여야 한다. 또한 함수에서 복귀했을때 사라지지않고 그대로 남아있어야 한다. 이를 유지하기 위한 구조로 스택 프레임이 사용된다. 쉽게 정의하면 스택 안에서 함수마다 스택 프레임이라는 틀을 만들고 함수가 실행되면 틀을 생성하고 함수가 종료되면 틀을 제거한다고 보면 된다.

위의 그림은 함수 내부에서 함수가 호출 되었을 때 스택 프레임이 어떻게 생성 되는지 그림으로 나타낸 것이다. 함수 내부에서 새로운 함수가 호출이 되면 이전 함수의 복귀 주소를 먼저 저장을 한다. 즉 eip, rip가 돌아갈 장소를 먼저 저장을 한다. 또한 스택 내부에서 스택 프레임 또한 돌아가야 한다. 따라서 이전 스택 프레임이 돌아갈 주소 또한 저장한다. 위에서는 이전 프레임 주소라고 칭하였지만 조금 더 전문적으로는 sfp라는 용어가 있다. 그 다음에는 저장할 지역변수들이 저장된다. 이렇게 스택 프레임을 구분한다.

위의 그림은 앞선 그림과 반대로 제거 되는 과정을 그림으로 표현하였다. 이전 프레임 주소와 이전 함수 복귀 주소를 통하여 스택 프레임을 철폐를 한다. 이를 그림과 설명만으로 보여주는 것에는 한계가 있어 어셈블리어와 함께 설명하겠다.
'해킹 > 포너블' 카테고리의 다른 글
| x86, x64 레지스터 (0) | 2023.09.13 |
|---|---|
| 컴퓨터 구조 (0) | 2023.09.13 |