ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Memory 구조
    System hacking training/Knowledge 2018. 2. 3. 18:39

    프로그램이 실행되기 위해서는 프로그램이 메모리 상에 로드 되어 메모리 안에 있어야한다.


    운영체제는 프로그램 실행을 위해서 다양한 메모리 공간을 제공한다.


    프로그램은 크게 instruction(명령)과 data로 구분되고,


    5가지로 세분화 하면


    Code/Data/BSS/Heap/Stack


    영역으로 이루어져있다.


    <High address>


    Stack

    Heap 

    BSS 

    Data

    Code(text) 

     

    <Low address>



    1. Code(text) 영역 : 실행할 코드가 저장되는 영역 /  HEX 파일 or BIN파일 메모리

    2. Data 영역 : 프로그램의 전역 변수, 정적 변수, 배열, 구조체 등이 저장되는 영역 / 프로그램의 시작과 함께 할당, 프로그램 종료시 소멸

    3. BSS 영역 : 초기화가 되지 않은 데이터가 저장됨 (Data역역은 초기화된 데이터가 저장됨)

    4. Heap 영역 : 필요에 의해 동적으로 메모리를 할당 하고자 할 때 위치하는 메모리 영역으로 동적 데이터 영역이라고 부른다.(C : malloc() / C++ : new())

    5. Stack 영역 : 프로그램이 자동으로 사용하는 임시 메모리 영역.
    - Local (지역)변수, 매개변수(parameter), 리턴 값 등 잠시 사용되었다가 사라지는 데이터를 저장하는 영역.
    - 스택 사이즈는 프로세스가 메모리에 로드될때 고정되어있다. 따라서 런타임 시에는 스택 사이즈를 바꿀 수 없다.

    + Stack 은 FILO(First In Last Out)구조이다. 즉, 처음 들어간 것이 나중에 나온다는 의미이다. 비유를 하자면 그릇을 쌓아놓고(PUSH) 밑에 부터 빼려고 하면 위의 그릇들이 떨어져서 깨지게 될것이다. 그렇기때문에 제일 위에 있는 그릇부터 빼야하고, 이는 어셈블리 명령어에서 POP에 해당한다. 높은 주소에서 낮은 주소로 쌓인다.

    + Heap 은 동적할당 할때 사용한다. 여느 영역과 같이 메모리의 낮은 주소에서 높은 주소로 할당된다.


    반응형

    'System hacking training > Knowledge' 카테고리의 다른 글

    ELF Technique - RTL(Return To Library)  (0) 2018.02.16
    gdb 명령어  (0) 2018.02.13
    ELF Memory Protection - DEP/NX  (0) 2018.02.10
    ELF Memory Protection - ASCII Armor  (0) 2018.02.06
    ELF Memory Protection - ASLR  (0) 2018.02.06
Designed by Tistory.