[TIL]메모리 구조, 매핑

KBC·2024년 8월 20일
0

TIL

목록 보기
6/8

1. 실행 파일의 메모리 구조

프로그램이 메모리에 로드될 때, 다음과 같은 주요 섹션들로 나뉘게 된다:

  • 텍스트 섹션 (Text Section):
    의미와 용도: 프로그램의 실행 코드가 저장되는 영역이다. CPU가 실행할 기계어 코드가 이 섹션에 위치하며, 일반적으로 읽기 전용(read-only)으로 설정된다.
    특징: 이 섹션은 변경되지 않으며, 모든 프로세스에서 동일한 프로그램 코드가 실행되는 경우 메모리 절약을 위해 공유될 수 있다.
  • 데이터 섹션 (Data Section):
    의미와 용도: 전역 변수와 정적 변수가 저장되는 영역이다. 초기화된 데이터(.data)와 초기화되지 않은 데이터(.bss)로 나뉜다.
    특징: .data는 프로그램 실행 전에 초기화된 데이터를 저장하며, .bss는 초기화되지 않은 변수를 저장하는데, 실제로 메모리 공간은 할당되지만 값은 지정되지 않는다.
  • 힙 섹션 (Heap Section):
    의미와 용도: 동적으로 할당된 메모리가 저장되는 영역이다. 프로그램이 실행되면서 필요에 따라 메모리를 할당하고 해제할 수 있다.
    특징: 힙은 메모리의 낮은 주소에서 높은 주소 방향으로 확장된다. 프로그램이 실행되는 동안 크기가 동적으로 변경될 수 있다.
  • 스택 섹션 (Stack Section):
    의미와 용도: 함수 호출 시 지역 변수, 함수 인수, 리턴 주소 등이 저장되는 영역이다. 각 함수 호출 시마다 새로운 프레임이 스택에 추가된다.
    특징: 스택은 메모리의 높은 주소에서 낮은 주소 방향으로 확장되며, 함수 호출이 끝나면 해당 스택 프레임이 제거된다.

2. /proc/{PID}/maps 파일

/proc/{PID}/maps 파일은 현재 실행 중인 프로세스의 메모리 매핑 정보를 제공하는 가상 파일이다. 여기서 {PID}는 해당 프로세스의 식별자이다. 이 파일에는 프로세스가 사용 중인 모든 메모리 영역에 대한 정보가 담겨 있으며, 각 메모리 섹션의 시작 주소, 종료 주소, 접근 권한, 해당 메모리 영역과 연결된 파일 등이 포함된다.

cat /proc/1234/maps

이 명령어를 통해 PID 1234의 프로세스 메모리 매핑 정보를 확인할 수 있다.

  • Address Range: 메모리 주소 범위를 나타낸다. 예를 들어, 00400000-0040b000은 해당 메모리 영역이 이 주소 범위에 매핑되었음을 의미한다.
  • Permissions: 메모리 영역의 접근 권한을 나타냅니다.
    r-xp: 읽기 가능(Readable), 실행 가능(Executable), 사적인(private) 페이지입니다.
    rw-p: 읽기 가능, 쓰기 가능(Writeable), 사적인 페이지입니다.
    r--p: 읽기 가능, 실행 불가능, 사적인 페이지입니다.
    ---p: 실행 불가능, 읽기 불가능, 쓰기 불가능한 페이지입니다.
  • Mapped File/Region: 해당 메모리 영역과 연결된 파일이나 지역을 나타냅니다. 예를 들어, /usr/bin/bash는 해당 메모리 영역이 이 파일과 연결되어 있음을 나타냅니다. [heap], [stack]와 같은 항목은 힙과 스택 영역을 나타냅니다.

3. 각 섹션의 권한 및 특징

  • 텍스트 섹션 (Text Section):
    권한: 일반적으로 r-x로 설정된다. 이는 읽기 가능하며 실행할 수 있지만, 쓰기는 불가능하다는 의미이다.
    특징: 읽기 전용이므로 코드의 무결성을 보장하며, 여러 프로세스 간에 공유될 수 있다.
  • 데이터 섹션 (Data Section):
    권한: 일반적으로 rw-로 설정된다. 읽기와 쓰기가 가능하지만 실행은 불가능하다.
    특징: 실행 중에 변할 수 있는 데이터가 포함되며, 프로세스마다 고유한 데이터 공간을 가진다.
  • 힙 섹션 (Heap Section):
    권한: rw-로 설정된다. 동적으로 메모리가 할당되고 해제되므로, 읽기와 쓰기가 가능하다.
    특징: 크기가 동적으로 변경되며, 메모리 부족 시 시스템에서 확장될 수 있다.
  • 스택 섹션 (Stack Section):
    권한: rw-로 설정된다. 함수 호출 시마다 스택에 새로운 데이터가 추가되므로, 읽기와 쓰기가 가능하다.
    특징: 자동으로 관리되며, 잘못된 접근(예: 스택 오버플로우)이 발생하면 프로그램이 비정상적으로 종료될 수 있다.
profile
AI, Security

0개의 댓글