1. 텍스트(코드 영역)
유저가 작성한 소스코드가 들어가는 영역
어셈블리 형태로 코드가 올라간다.
컴파일러가 생성한 기계어가 들어있다.
이곳의 명령 실행 순서는 순차적이지 않아 순서를 맞추기 위해 EIP 레지스터를 이용한다.
*EIP 레지스터(Extended Instruction Pointer) : 다음에 수행해야 하는 명령이 있는 메모리 상의 주소가 들어있음
또한, 진짜 코드만 저장하고 있는 영역으로 쓰기가 금지되어 있고, 읽기만 가능하다.
2. 데이터 영역(initialized)
초기화 된 변수들이 할당되는 영역
전역변수가 항상 동일한 메모리로 올라간다.(고정 주소) - 취약점 가능
프로그램 시작과 동시에 할당되며, 프로그램이 종료될 때 메모리가 소멸한다.
3. BSS 영역(uninitialized)
초기화 되지 않은 변수들이 할당되는 영역
그 변수들이 어느 정도의 메모리를 할당할 것이라는 정보를 저장
일반적으로 프로그램 로더가 프로그램을 로드할 때 bss영역에 할당된 메모리를 초기화 한다.
4. 힙 영역
동적으로 메모리를 할당하기 위한 메모리 영역
메모리 주소 값에 의해서만 참조되고 사용된다.
런타임 시 크기가 결정되고 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.
메모리 할당 해제 부분이 실제로 해제되지 않고, 재사용할 수 있다면 취약점이 있을 수 있음
5. 스택 영역
프로그램 실행 중 잠시 사용되었다가 사라지는 데이터(지역변수, 매개변수 등)들이 쌓이는 메모리 영역
함수의 호출과 함께 할당되고, 함수 호출이 완료되면 소멸한다.
리틀 엔디안 방식으로 저장되므로 하위 바이트부터 먼저 들어간다. - 커널을 건들면 안되기 때문
스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 한다.
참고)
'Pwnable' 카테고리의 다른 글
[pwnable.kr] bof (0) | 2021.05.18 |
---|---|
[Pwnable] GDB로 코드 분석 (0) | 2021.05.11 |
[Pwnable] GDB 사용방법 정리 (0) | 2021.05.11 |
[pwnable.kr] collision (0) | 2021.05.05 |
[pwnable] swing_pwn_chall (0) | 2021.04.28 |
댓글