메모리 구조


 

1. 코드(텍스트) 영역

- 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고 부른다.

- cpu는 코드영역에 저장된 명령어를 하나씩 가져가서 처리하게 된다.

- 코드 자체를 구성하는 메모리 영역으로 Hex파일이나 BIN파일 메모리다.

- 프로그램 명령이 위치하는 곳으로 기계어로 제어되는 메모리 영역이다.


2. 데이터 영역

- 전역변수, 정적변수, 배열, 구조체 등이 저장된다.

- 프로그램이 실행 될 때 생성되고 프로그램이 종료 되면 시스템에 반환 된다.

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

 


3. BSS 영역

- 초기에 오직 제로 값으로 표시된 정적으로 할당된 변수가 포함된 데이터 세그먼트의 일부로 컴파일러나 링커에 의해 사용된다. 초기화되지 않은 전역 데이터를 위한 영역이다.

- compile time에 크기가 결정되고 이후에 변동되지 않는다.


 

4. 스택 영역

- 프로그램이 자동으로 사용하는 임시 메모리 영역이다.

- 지역변수, 매개변수, 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역이다.

- 함수 호출 시 생성되고, 함수가 끝나면 시스템에 반환 된다.

- 스택 사이즈는 각 프로세스마다 할당 되지만 프로세스가 메모리에 로드 될 때 스택 사이즈가 고정되어 있어 런타임 시에 스택 사이즈를 바꿀 수는 없다.

- 명령 실행 시 자동 증가,감소 하기 때문에 보통 메모리의 마지막 번지를 지정한다.

 


5. 힙 영역

- 필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부르며 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다.

- 이 영역의 데이터를 저장하기 위해서는 cmalloc(), c++new()함수를 사용한다. C언어에서는 자동으로 해체되지 않기 때문에 free()함수로 직접 해제해주어야 한다.

'보안 > 포너블' 카테고리의 다른 글

포너블 Day5 GDB 실행 과정  (0) 2021.05.12
포너블 Day5 GDB설치, 명령어  (0) 2021.05.12
포너블 Day4 collision 문제풀이  (0) 2021.05.05
포너블 Day3 리눅스 특수 권한  (0) 2021.05.05
[포너블 Day2] pwntools  (0) 2021.04.28

+ Recent posts