본문 바로가기
Pwnable

[Pwnable] 리눅스 메모리 구조

by sseddi 2021. 3. 31.
728x90

32bit 운영체제

 

1. 텍스트(코드 영역)

유저가 작성한 소스코드가 들어가는 영역

어셈블리 형태로 코드가 올라간다.

컴파일러가 생성한 기계어가 들어있다.

이곳의 명령 실행 순서는 순차적이지 않아 순서를 맞추기 위해 EIP 레지스터를 이용한다.

*EIP 레지스터(Extended Instruction Pointer) : 다음에 수행해야 하는 명령이 있는 메모리 상의 주소가 들어있음

또한, 진짜 코드만 저장하고 있는 영역으로 쓰기가 금지되어 있고, 읽기만 가능하다.

 

2. 데이터 영역(initialized)

초기화 된 변수들이 할당되는 영역

전역변수가 항상 동일한 메모리로 올라간다.(고정 주소) - 취약점 가능

프로그램 시작과 동시에 할당되며, 프로그램이 종료될 때 메모리가 소멸한다.

 

3. BSS 영역(uninitialized)

초기화 되지 않은 변수들이 할당되는 영역

그 변수들이 어느 정도의 메모리를 할당할 것이라는 정보를 저장

일반적으로 프로그램 로더가 프로그램을 로드할 때 bss영역에 할당된 메모리를 초기화 한다.

 

4. 힙 영역

동적으로 메모리를 할당하기 위한 메모리 영역

메모리 주소 값에 의해서만 참조되고 사용된다.

런타임 시 크기가 결정되고 사용자에 의해 메모리 공간이 동적으로 할당되고 해제된다.

메모리 할당 해제 부분이 실제로 해제되지 않고, 재사용할 수 있다면 취약점이 있을 수 있음

 

5. 스택 영역

프로그램 실행 중 잠시 사용되었다가 사라지는 데이터(지역변수, 매개변수 등)들이 쌓이는 메모리 영역

함수의 호출과 함께 할당되고, 함수 호출이 완료되면 소멸한다.

리틀 엔디안 방식으로 저장되므로 하위 바이트부터 먼저 들어간다. - 커널을 건들면 안되기 때문

스택 영역에 저장되는 함수의 호출 정보를 스택 프레임이라고 한다.

 

 

참고)

velog.io/@hidaehyunlee/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EC%95%8C%EC%95%84%EB%B3%B4%EC%9E%90

 

 

728x90

'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

댓글