'한빛아카데미 - 시스템 해킹과 보안' 교재에 관한 내용입니다.


•  80x86 시스템 메모리 구조

 

 스택

- 후입선출(LIFO : Last-In, First Out) 방식에 의해 정보를 관리

- Top이라고 불리는 스택의 끝부분에서 데이터의 삽입과 삭제가 발생

- 가장 나중에 삽입된 정보가 가장 먼저 읽힘

- 컴퓨터 메모리 상의 스택은 프로그램 함수 내부에서 정의

- 함수 종료와 동시에 사라지는 자동 변수가 저장되고 함수를 호출할 때 함수 내부의 로컬 변수 등이 저장되는 곳

- 스택은 함수 실행 동안에만 존재하며, 종료 시 해당 변수들도 사라짐

- ESP 레지스터는 항상 스택의 가장 위(스택의 끝)를 가리킴

 

 힙(Heap)

- 프로그램의 실행 중 필요한 기억 장소를 할당하기 위해 운영체제에 예약되어 있는 기억 장소영역

- 데이터를 저장하기 위해 기억 장소를 요청하면 운영체제는 힙에 존재하는 기억 장소를 프로그램에 할당

- 기억 장치가 더 이상 필요 없으면 할당 받았던 기억 장소를 운영체제에 반납, 운영체제에서는 반납된 기억 장소를 다시 힙에 돌려줌

- 힙에 대한 기억 장소는 포인터를 통해 동적으로 할당되거나 반환

- 연결 리스트, 트리, 그래프처럼 동적인 특성이 있는 데이터 구조에서 널리 사용

char * p = new char[1000];

 

BSS 세그먼트

- 초기화 되지 않은 데이터 세그먼트(Uninitalized data segment)라고 불리며, 프로그램이 실행될 때 0이나 NULL 포인터로 초기화

- 외부 변수나 static 변수 중 초기화 되지 않은 변수들을 저장하는 영역

static int a;

 

 데이터 세그먼트

- 초기화된 외부 변수나 static 변수 등이 저장되는 영역

static int a = 1;

텍스트 세그먼트

- CPU로 실행되는 머신 코드가 있는 영역으로, EIP가 다음에 실행하는 명령을 가짐

 

 초기 8086 시스템 메모리 구조

- 초기 8086 CPU 사용하던 컴퓨터는 메모리 크기가 1MB 였음

 

• 메모리 접근 모드

1 | 실제모드

- X86계열로 처음 등장한 8086 CPU에 사용

- 프로그램이 실제 메모리에 바로 접근하는 방식

2 | 보호모드 - 80286부터 도입된 보호 모드(Protected Mode)는 32비트 CPU 80386에서 완성

- 프로그램이 각자의 가상 메모리 영역에 할당됨 - 다른 프로그램의 접근을 막는 데이터 보호 기능 제공

 

• 실제 모드

- 20비트 주소 버스로 총 1MB(𝟐 𝟐𝟎 = 𝟏, 𝟎𝟒𝟖, 𝟓𝟔𝟕) 메모리 사용 가능

- 16비트 레지스터로 20비트 주소를 나타내기 위해 세그먼트 레지스터 도입

- 아래 그림 처럼, 16비트 세그먼트 레지스터와 16비트 오프셋을 중첩시켜 20비트의 물리 주소 생성

- 세그먼트 주소인 CS 레지스터가 0x2525h 

- 오프셋인 IP가 0x95F3h면 0x2525h 뒤에 한 자리의 0x0h를 붙여 0x95F3h를 더한 0x2E843h가 실제 가리키는 물리 주소가 됨

- 이를 2525h:95F3h 또는 [CS]: 95F3h

20비트 메모리 주소 구성 예

세그먼트 레지스터 오프셋 레지스터
CS IP
DS SI, DI, BX
SS SP, BP
ES SI, DI, BX

 

- 모든 메모리 접근에는 세그먼트와 오프셋이 함께 필요하며, 세그먼트 하나를 사용하면 64KB (2^16 = 65,536) 메모리 사용 가능

- 모든 프로그램은 처음 시작할 때는 실제 모드에서 동작

- 실제 모드에서 동작하는 프로그램은 메모리의 어떤 영역이든지 마음대로 접근 가능

 

 보호 모드

- 32비트 주소 버스를 통해 4GB의 메모리를 사용 가능

- 메모리 보호 기능과 페이징(Paging) 등을 통해 가상 메모리 구현

- 세그먼테이션(Segmentation)과 페이징을 이용하여 메모리 관리

- 세그먼테이션은 4GB의 메모리를 세그먼트 단위로 쪼갠 것

- 16비트의 셀렉터(Selector)와 32비트의 오프셋을 이용해 32비트 선형 주소(linear address)를 만듦

- 선형주소는 4KB 단위로 쪼개서 관리하는 페이징을 이용하여 물리주소로 변환됨

 

보호 모드에서의 메모리 변환 과정

 

 

+ Recent posts