InfoSec/Reversing

[Reversing] 스택 프레임

2024. 2. 4. 20:26
목차
  1. 1. 스택 프레임이란?
  2. 2. 스택 프레임의 구조
  3. 3. 스택 오버플로우

1. 스택 프레임이란?

함수가 호출될 때에도 스택의 원리를 사용하게 됩니다.

예를 들어 아래와 같은 프로그램이 있다고 칩시다.

int main()
{
func1();
}
void func1()
{
func2();
}
void func2()
{
}

그러면 스택에는 이런 식으로 함수들이 쌓이게 되겠죠.

step1 step2 step3
main() func1() func2()
  main() func1()
    main()

이렇게 스택 영역에 차례대로 저장되는 각각의 함수 호출 정보를 스택 프레임 이라고 합니다.

예를 들자면 step 3에서는 스택 프레임 3개가 존재하게 되는 것입니다.

스택 프레임들도 마찬가지로 호출된 후 모든 프로그램 수행을 마치면 스택에서 삭제되겠죠?

step4 step5 step6
func1() main()  
main()    
     

2. 스택 프레임의 구조

위의 예시에서는 쉬운 이해를 돕기 위해 함수명만 적었지만,

하나의 스택 프레임은 해당 함수의

- 매개변수 (뒤에서 부터 저장)

- 반환 주소값

- 지역변수 

등의 정보들을 저장하게 됩니다.

 

출처: TCP school


3. 스택 오버플로우

void main() {
func1();
}
void func1() {
func1();
}

만약 위와 같은 프로그램이 있다고 칩시다.

그럼 func1 함수의 재귀 호출로 인해서

스택에는 func1의 스택 프레임이 무한히 쌓이게 될 출처것입니다.

출처: TCP school

 

하지만 스택 영역도 크기가 한정되어 있기 때문에

어느 순간부터는 해당 프레임은 스택 영역을 넘어서게 됩니다.

 

그 순간 스택 오버플로우(Stack Overflow) 가 일어나게 되는데요,

그 이유는 프로그램이 만약 스택 영역을 넘어 다른 메모리 영역을 침범하여

저장되면 프로그램이 오작동하게 되고 보안상의 문제가 발생하기 때문입니다.

 

그래서 스택 오버플로우를 작동시켜 다른 메모리 침범을 막기 위해

프로그램을 강제적으로 종료시키는 것이죠.

저작자표시 비영리 변경금지
  1. 1. 스택 프레임이란?
  2. 2. 스택 프레임의 구조
  3. 3. 스택 오버플로우
'InfoSec/Reversing' 카테고리의 다른 글
  • [Reversing] 어셈블리 코드 분석
  • [Reversing] 어셈블리어 x86-64
  • [Reversing] 레지스터
  • [Reverisng] 스택
agor
agor
agor
Steady Study
agor
전체
오늘
어제
  • Category (61)
    • Language (5)
      • C (1)
      • Java (1)
      • PHP (3)
    • DB (1)
      • MySQL (1)
    • Library (2)
      • React (2)
    • Framework (1)
      • SpringBoot (1)
    • Coding Test (13)
      • C (3)
      • Python (10)
    • Computer Science (6)
      • Computer Architecture (3)
      • Network (3)
    • OS (7)
      • Linux (7)
    • InfoSec (23)
      • Pawnable (3)
      • Reversing (8)
      • Wargame (11)
      • Web (1)
    • Cloud (1)
      • AWS (1)

블로그 메뉴

  • 📖Guestbook
  • 🖥️GitHub
  • ✏️Post
  • ⚙️Manager

공지사항

인기 글

태그

  • 오블완
  • 티스토리챌린지

최근 댓글

최근 글

hELLO · Designed By 정상우.
agor
[Reversing] 스택 프레임
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.