Prototype Ghost
귀신일지
Prototype Ghost
전체 방문자
오늘
어제
  • 분류 전체보기 (29)
    • Hacking (1)
      • CTF (0)
      • Wargame (0)
      • Review (1)
    • C (12)
      • Crypto (12)
    • C++ (4)
    • Python (1)
    • Swift (1)
    • Blockchain (9)
      • Solidity (9)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 복호화
  • 암호화폐
  • 보안
  • openssl
  • solidity
  • 프로그래밍
  • 리눅스
  • 접근제어
  • ethereum
  • 암호화
  • 정보보안
  • Blockchain
  • 솔리디티
  • C
  • 블록체인
  • 이더리움
  • 비트코인
  • c언어
  • C++
  • Bitcoin

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Prototype Ghost

귀신일지

Hacking/Review

리눅스 메모리 구조

2023. 3. 20. 20:08

간단하게 리눅스 메모리 구조에 대해서 짚어보겠다.

 

리눅스 메모리 구조는 간단하게 표현하면 아래와 같다.

 

0x00000000

코드 세그먼트

------------

데이터 세그먼트

------------

BSS 세그먼트

------------

힙 세그먼트

------------

|

|

v

^

|

|

스택 세그먼트

------------

0xffffffff

여기서 힙은 아래로, 즉 주소가 높아지도록 자라고 스택은 위로, 즉 주소가 낮은 쪽으로 증가하기에 위와 같은 화살표로 표현하였다.

각 영역에 대해 간단하게 알아보자. 

 

코드 세그먼트

- 실행 가능한 기계 코드가 위치, 코드를 실행해야 하므로 이 영역은 읽기, 실행 권한이 부여된다.  쓰기 영역이 활성화되면 공격자에 의해 악의적인 코드가 삽입될 수 있으므로 쓰기 권한은 없다.

 

데이터 세그먼트

-컴파일 시점에 값이 정해진 전역 변수, 전역 상수들이 위치한다. 변수 데이터는 읽을 수 있어야 하므로 당연히 읽기 권한이 부여된다.

이 때, 데이터 세그먼트는 쓰기 가능 영역과 불가능한 영역으로 나뉘는데, 변할 수 있는 글로벌 '변수'의 영역을 쓰기 가능한 영역인 data 세그먼트, 글로벌 '상수'는 변할 수 없기 때문에 읽기 불가능한 rodata 세그먼트(read-only data)영역으로 구분한다.

 

BSS 세그먼트

-컴파일 시점에 값이 정해지지 않은 전역변수가 위치한다. 선언만하고 초기화 시키지 않은 전역변수가 이곳에 해당하며, 프로그램이 시작될 때 모두 0으로 초기화 된다. 이 또한 변수를 읽고 쓸 수 있어야 하므로 읽기, 쓰기 권한이 부여된다.

 

그 외 힙은 힙데이터가, 스택은 프로세스의 스택이 위치하는 영역이다. 스택 영역도 cpu가 자유롭게 값을 읽고 쓸 수 있어야 하므로, 읽기와 쓰기 권한이 부여된다. 힙 영역도 읽기와 쓰기 권한이 부여된다.

 

굉장히 기본적이면서도 중요한 내용이기에 간단하게 리눅스 메모리 구조에 대해 정리해보았다.

 

참고자료

https://dreamhack.io/lecture/courses/52

728x90
반응형
    Prototype Ghost
    Prototype Ghost

    티스토리툴바