SlideShare une entreprise Scribd logo
1  sur  2
Télécharger pour lire hors ligne
먼저 StackFrame을 알아보기 전에 스택이란 무엇인지 알아보겠습니다.
쉽게 말해서 스택은 CPU가 연산을 할 때 사용하는 임시 저장 공간입니다.
여러 개의 데이터 항목들이 일정한 순서로 나열된 구조로서, 한쪽 끝에서만 새로운 항목을
삽입, 기존 항목을 삭제할 수 있는 자료구조입니다.
Stack 의 특징 때문에 흔히 "FILO (First-In-Last-Out)" 혹은 "LIFO (Last-In-First-Out)"
라고 한다. 선입후출, 후입선출 형 자료구조입니다.


FIFO 선입선출법(first in first out)


       -먼저 들어간 것이 먼저 나옵니다.


LIFO 후입선출법(_last in first out)


       -마지막으로 들어간 것이 먼저 나온다.


아래사진은 스택의 원리가 잘 설명되어 있는 이미지입니다.




                                                       표출처:네이버이미지


스택에서는 데이터의 한계(limit)가 있는데 이것을 초과하여 push할 경우 overflow,
자료가 없는 상황에서 pop할 경우 underflow라고 한다.
그럼 이제 StackFrame에 대해 알아보도록 하겠습니다.
스택 프레임은 로컬 변수와 함수 호출에 사용됩니다.
스택 프레임 이란 EBP 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에
접근하는 기법을 말한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에
스택에 저장된 변수, 파라미터에 접근하고자 할 때 함수 시작점 ESP를 EBP에 저장하고 이
를 함수 내에서 유지해주면, ESP 값이 아무리 변하더라도 EBP를 기준으로 안전하게 변수,
파라미터,복귀 주소에 접근 할 수 있습니다.


그럼 실제로 간단한 assembly 코드를 보면 이런 식입니다.


3:   int main(int argc, char* argv[])
0040B500     push         ebp            <-- 함수 시작(기존의 EBP를       스택에 저장)
0040B501     mov          ebp,esp            <-- esp값을 ebp로 복사
0040B503     sub          esp,48h            <-- ebp~esp 함수사용공간 확보


5:         int a = 1, b = 2;


7:         return 0;
004010B0     mov          esp,ebp            <--ESP정리
004010B2     pop          ebp                <--EBP를 원래 기존값으로 복원
004010B3     ret                             <-- 함수 종료



위를 보면 함수 시작시 EBP값에 ESP를 넣고 ESP에서 필요한 함수 메모리 만큼 빼서 함수
사용 공간을 확보 하고 있음을 확인할 수 있습니다


                    EBP, ESP.                               EBP


        스택                                           스택


                                                            ESP




참고한 사이트:http://www.reversecore.com ,
Copyright ⓒ 2011. 육승찬. All rights Reserved

Contenu connexe

Tendances

(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육탑크리에듀(구로디지털단지역3번출구 2분거리)
 
Macro & compilation
Macro & compilationMacro & compilation
Macro & compilationIkhoon Eom
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Circulus
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍흥배 최
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Circulus
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장SeongHyun Ahn
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료욱진 양
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택JinTaek Seo
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Circulus
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해Nam Hyeonuk
 
Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09fromitive
 
사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401guest91f89d83
 
Java mentoring of samsung scsc 3
Java mentoring of samsung scsc   3Java mentoring of samsung scsc   3
Java mentoring of samsung scsc 3도현 김
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 

Tendances (20)

(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
(SQL초보자를 위한, 쿼리최적화 for SQL튜닝)SQL쿼리작성Tip,최적화팁,최적화된SQL작성방법교육
 
Macro & compilation
Macro & compilationMacro & compilation
Macro & compilation
 
Any(some),all,exists(2)
Any(some),all,exists(2)Any(some),all,exists(2)
Any(some),all,exists(2)
 
javascript02
javascript02javascript02
javascript02
 
Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저Startup JavaScript 6 - 함수, 스코프, 클로저
Startup JavaScript 6 - 함수, 스코프, 클로저
 
Boost
BoostBoost
Boost
 
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
[KGC 2012]Boost.asio를 이용한 네트웍 프로그래밍
 
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
Startup JavaScript 5 - 객체(Date, RegExp, Object, Global)
 
8 swift 중첩함수
8 swift 중첩함수8 swift 중첩함수
8 swift 중첩함수
 
파이썬 스터디 15장
파이썬 스터디 15장파이썬 스터디 15장
파이썬 스터디 15장
 
14. fiile io
14. fiile io14. fiile io
14. fiile io
 
골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료골때리는 자바스크립트 발표자료
골때리는 자바스크립트 발표자료
 
Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택Boost라이브러리의내부구조 20151111 서진택
Boost라이브러리의내부구조 20151111 서진택
 
Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리Startup JavaScript 3 - 조건문, 반복문, 예외처리
Startup JavaScript 3 - 조건문, 반복문, 예외처리
 
Iocp 기본 구조 이해
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
 
Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09Reverse Engineering 2015.02.09
Reverse Engineering 2015.02.09
 
사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401사내스터디 발표 온라인게임서버이해 20100401
사내스터디 발표 온라인게임서버이해 20100401
 
Java mentoring of samsung scsc 3
Java mentoring of samsung scsc   3Java mentoring of samsung scsc   3
Java mentoring of samsung scsc 3
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
(오라클SQL기초강좌)상관 서브쿼리(Correlated Sub Query)
 

Stack frame

  • 1. 먼저 StackFrame을 알아보기 전에 스택이란 무엇인지 알아보겠습니다. 쉽게 말해서 스택은 CPU가 연산을 할 때 사용하는 임시 저장 공간입니다. 여러 개의 데이터 항목들이 일정한 순서로 나열된 구조로서, 한쪽 끝에서만 새로운 항목을 삽입, 기존 항목을 삭제할 수 있는 자료구조입니다. Stack 의 특징 때문에 흔히 "FILO (First-In-Last-Out)" 혹은 "LIFO (Last-In-First-Out)" 라고 한다. 선입후출, 후입선출 형 자료구조입니다. FIFO 선입선출법(first in first out) -먼저 들어간 것이 먼저 나옵니다. LIFO 후입선출법(_last in first out) -마지막으로 들어간 것이 먼저 나온다. 아래사진은 스택의 원리가 잘 설명되어 있는 이미지입니다. 표출처:네이버이미지 스택에서는 데이터의 한계(limit)가 있는데 이것을 초과하여 push할 경우 overflow, 자료가 없는 상황에서 pop할 경우 underflow라고 한다.
  • 2. 그럼 이제 StackFrame에 대해 알아보도록 하겠습니다. 스택 프레임은 로컬 변수와 함수 호출에 사용됩니다. 스택 프레임 이란 EBP 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 함수 시작점 ESP를 EBP에 저장하고 이 를 함수 내에서 유지해주면, ESP 값이 아무리 변하더라도 EBP를 기준으로 안전하게 변수, 파라미터,복귀 주소에 접근 할 수 있습니다. 그럼 실제로 간단한 assembly 코드를 보면 이런 식입니다. 3: int main(int argc, char* argv[]) 0040B500 push ebp <-- 함수 시작(기존의 EBP를 스택에 저장) 0040B501 mov ebp,esp <-- esp값을 ebp로 복사 0040B503 sub esp,48h <-- ebp~esp 함수사용공간 확보 5: int a = 1, b = 2; 7: return 0; 004010B0 mov esp,ebp <--ESP정리 004010B2 pop ebp <--EBP를 원래 기존값으로 복원 004010B3 ret <-- 함수 종료 위를 보면 함수 시작시 EBP값에 ESP를 넣고 ESP에서 필요한 함수 메모리 만큼 빼서 함수 사용 공간을 확보 하고 있음을 확인할 수 있습니다 EBP, ESP. EBP 스택 스택 ESP 참고한 사이트:http://www.reversecore.com , Copyright ⓒ 2011. 육승찬. All rights Reserved