IT 그리고 정보보안/Knowledge base

x86 메모리 구조

plummmm 2021. 4. 17. 11:06
반응형

우리는 인텔 32비트 시스템 즉, 8086 시스템에 대해 알아본다.

x86 메모리 구조 (8086 Memory Architecture) 는 아래와 같이 생겼다.

 

위에서 부터 설명하겠음.

 

* 커널 영역 : OS의 시스템 코드가 로드되는 부분이다. 우리가 직접 건드릴 수 없는 영역이다.

* Off-Limit 영역 : 사용자가 커널 영역에 접근하지 못하도록 할당 해둔 공간이다.

* 유저 영역 : 유저가 실제 사용하는 영역이다. 스텍, 힙, 코드 영역이 여기에 포함된다.

* Null Pointer 할당 영역 : 모두 0이고 변경 불가능한 영역, 시스템 보호 차원에서 만들어둔 영역

 

위 메모리 구조는 윈도우 기준이고, 리눅스는 커널영역이 1GB 이다.

 

32비트 기준으로.. 시스템에 실행되는 모든 프로세스들은 4GB의 가상메모리를 할당 받는다.

우리에게 필요한 영역은 유저 영역이니깐.. 유저 영역에 대해 자세히 보자.

 

유저 영역을 위 그림처럼 저렇게 쪼개서 쓴다.

컴퓨터 공부 시작할 때 부터 스택,힙 같은 메모리 영역에 대해 울렁증이 있어서..(=_=) 

최대한 쉽게 한글로 다 풀어썼다. 뿨킹 잉글리쉬

 

각각 영역에 대한 설명을 시작하지. 보다시피 아래에서 부터 낮은 주소이다.

낮은 주소부터 설명함.

 

* 코드 영역 (= 텍스트 영역) 

실제 실행되는 기계어 명령어들, 어셈블리 코드가 쌓이는 곳이다.

프로그램이 실행되면 코드 영역에 있는 어셈블리 코드가 한 줄씩 해석되며 실행된다.

 

* 데이터 영역, BSS 영역 

프로그램에서 사용되는 전역변수, 정적변수 등 각종 변수들이 실제로 위치하는 메모리 영역이다.

굳이 데이터 영역과 BSS 영역을 나눌 필요는 없는데.. (두 개 합쳐서 데이터 영역 이라고도 함.)

변수가 초기화 되었는지, 초기화 되지 않았는지에 따라 나누어 진것이다.

초기화 되면 데이터 영역에

초기화 되지 않으면 BSS 영역에

 

* 힙 영역

동적 할당되는 변수의 데이터가 위치하는 영역이다.

malloc(), realloc(), free() 함수 같은 동적 할당과 관련되는 함수들에 의해 선언되는

동적변수가 이 곳에 위치한다. 

 

* 공유 라이브러리 영역

프로그램이 내부에서 사용하는 라이브러리 함수들과 관련된 공유 라이브러리 파일이 적재되는 영역.

스택과 힙 영역 중간에 위치한다. /lib/libc.so.6 등이 있음.

 

* 스택 영역

스택영역... 리버싱 또는 버퍼 오버플로우에 대한 공부를 하기위해선 필수로 스택 영역에 대해 확실히 알아야한다.

프로그램에서 사용되는 각종 환경 변수, 파라미터, 리턴 값, 지역변수 등의 정보를 담고 있는 영역이다, 

나중에 다시 포스팅 할거지만.. 가장 큰 특징이라면 후입선출, 높은 주소에서 낮은 주소로 메모리 할당 정도가 되겠따.

 

 

참고 - (달고나) 와우해커 BOF 기초문서 

반응형