메모리 구조

2020. 8. 8. 12:09

실행중인 프로그램의 메모리 구조이다.

CODE 영역

실행하는 프로그램 코드가 있는 영역

 

DATA 영역

전역변수(global), 정적변수(static)등이 저장되는 영역이며, 초기화되지 않은 변수는 BSS에 저장된다.

함수 내부에 선언된 static 변수는 프로그램이 실행될 때 공간만 할당되고, 그 함수가 실행될 때 초기화 된다.

 

HEAP 영역

런타임시 동적으로 할당된 변수 값이 있는 영역

 

공유 라이브러리 영역

프로그램에 사용되는 라이브러리와 관련된 공유 라이브러리 파일이 적재된 영역

 

                                                STACK 영역

                                                함수의 지역변수, 매개변수가 위치하는 영역

                                                PUSH, POP을 통해 스택의 데이터를 핸들링 할 수 있음

 

HEAP(힙)

 

요청한만큼 동적으로 메모리 할당

 

낮은 주소에서 높은 주소로 증가

 

런타임 시 크기 결정

 

 

 

 

 

 

 

 

 

 

STACK(스택)

 

후입선출(Last In, First Out)

 

높은 주소에서 낮은 주소로 증가

 

컴파일 시 크기 결정

 

각 함수별 전용 스택프레임을 가짐

 

 

 

 

 

 

 

 

Return address(복귀주소)

 

함수 종료 후 실행할 주소

 

Return address를 사용하는 이유?

  함수 종료된 후 복귀할 위치를 CPU에게 알려주기 위함

  프로그램의 안정성을 위해 복귀주소를 명시

 

함수 호출 전 return address를 스택에 저장

 

 

 

 

 

 

 

Stack frame(스택 프레임)

메모리(스택)의 안정성을 위한 역할

 

EBP 레지스터를 기준으로 스택 데이터에 접근

 

 

 

함수 프롤로그

함수의 시작부분에서 스택 프레임을 만들어주는 코드

PUSH EBP // 스택 프레임 생성(call)
MOV EBP, ESP
...

함수 에필로그

함수의 끝부분에서 스택 프레임을 해제하고 이전함수로 복귀하는 코드

MOV ESP, EBP // 스택 프레임 제거(return)
POP EBP
RET
...

 

'[▒] 언어 > Assembly' 카테고리의 다른 글

Shellcode - Shell Reverse TCP Shellcode  (0) 2020.09.11
직접 만든 수제 쉘코드  (0) 2020.09.07
기초  (0) 2020.08.07

BELATED ARTICLES

more