cho2cee
TIL
cho2cee
전체 방문자
오늘
어제
  • 전체 게시글 (78)
    • Cloud (31)
      • AWS (12)
      • Kubernetes (16)
      • IaC (3)
    • Security (15)
      • ELK (5)
      • Reversing (10)
    • Network (8)
    • Linux (4)
    • Etc. (20)
      • 기타 (4)
      • 업무 (16)

태그

  • AWS
  • 합격후기
  • SAA
  • CLOUD
  • VPC

최근 댓글

블로그 메뉴

  • 홈
  • 태그
  • 방명록
hELLO
cho2cee

TIL

[Reversing] 07. 스택 프레임
Security/Reversing

[Reversing] 07. 스택 프레임

2021. 12. 2. 02:22

스택 프레임 

스택 프레임이란 쉽게 말해 - ESP(스택 포인터)가 아닌 - EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다. 

 

ESP레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 EPS 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 있다. 

 

따라서 어떤 기준 시점(함수 시작)의 ESP값을 EBP에 저장하고 이를 함수 내에서 유지해주면, ESP 값이 아무리 변하더라도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다.

 

PUSH EBP 		; 함수 시작(EBP를 사용하기 전에 기존의 값을 스택에 저장) 
MOV EBP, ESP		; 현재의 ESP(스택 포인터)를 EBP에 저장

. . .			; 함수 본체
			; 여기서 ESP가 변경되더라도 EBP가 변경되지 않으므로 
         	  	; 안전하게 로컬변수와 파라미터를 액세스할 수 있음 
                
MOV ESP, EBP		; ESP를 정리(함수 시작했을 떄의 값으로 복원시킴)
POP EBP			; 리턴되기 전에 저장해 놓았던 원래 EBP 값으로 복원 
RETN			; 함수 종료

 

➜ 스택 프레임을 이용해서 함수 호출을 관리하면, 아무리 함수 호출 depth가 깊고 복잡해져도 스택을 완벽하게 관리할 수 있다. 

 

📌 참고 
- 최신 컴파일러는 최적화 옵션을 가지고 있어서 간단한 함수 같은 경우 스택 프레임을 생성하지 않는다.
- 스택에 복귀 주소가 저장된다는 점이 보안 취약점으로 작용할 수 있다. buffuer overflow 기법을 사용하여 복귀 주소가 저장된 스택 메로리를 의도적으로 다른 값으로 변경할 수 있다. 

 


Reference

🔗 http://www.yes24.com/Product/Goods/7529742

저작자표시 (새창열림)

'Security > Reversing' 카테고리의 다른 글

[Reversing] 09. Process Explorer  (0) 2021.12.03
[Reversing] 08. abex' crackme #2  (0) 2021.12.03
[Reversing] 06. abex'crackme #1 분석  (0) 2021.12.02
[Reversing] 05. 스택  (0) 2021.11.26
[Reversing] 04. IA-32 Register 기본 설명  (0) 2021.11.25
    'Security/Reversing' 카테고리의 다른 글
    • [Reversing] 09. Process Explorer
    • [Reversing] 08. abex' crackme #2
    • [Reversing] 06. abex'crackme #1 분석
    • [Reversing] 05. 스택
    cho2cee
    cho2cee
    Today I Learned

    티스토리툴바