ch@e
article thumbnail

Stage2 요약

 

<리눅스 메모리 구조>

컴퓨터(CPU + 메모리)

CPU: 명령어와 명령어 처리에 필요한 데이터를 메모리에서 읽고 ISA로 처리, 연산의 결과를 다시 메모리 적재

CPU와 메모리사이 연관이 있음 -> 메모리를 악의적으로 조작할 수 있다면 조작된 메모리 값에 의해 CPU도 잘못 동작(메모리 오염)

 

 

<리눅스 프로세스의 메모리 구조>

5단계 메모리 구조

 

리눅스에서는 프로세스의 메모리를 위 사진처럼 크게 5가지로 구분 -> 운영체제가 메모리를 용도별로 나누면 각 용도에 맞게 적절한 권한을 부여할 수 있는 장점이 있음. (CPU는 메모리에 대해 권한이 부여된 행위만 할 수 있음)

 

 

 

코드 세그먼트

: 텍스트 세그먼트라고도 하며 실행 가능한 기계 코드가 위치하는 영역(코드 저장소)

(읽기 권한과 실행 권한이 부여, 쓰기 권한이 있으면 악의적인 코드 삽입이 쉬워지므로 현대 운영체제는 이 권한 제거)

정수 31337 변환 (554889e5b8697a00005dc3라는 기계 코드로 변환되는데, 이 기계 코드가 코드 세그먼트에 위치)

 

 

 

데이터 세그먼트

: 컴파일 시점에 값이 정해진 전역변수 및 전역 상수들이 위치

(CPU가 데이터를 읽을 수 있어야 하므로 읽기 권한 부여, 쓰기 권한이 되는 세그먼트(data 세그먼트)와 못쓰는 세그먼트(rodata세그먼트)로 구분)

 

 

데이터 세그먼트에 포함되는 여러 데이터 유형 (str_ptr은 readonly 문자열을 가리키는데 이 문자열이 상수 문자열로 취급되어 rodata에 위치하고, 이를 가리키는 str_ptr은 전역변수로 data에 위치)

 

 

 

BSS 세그먼트

: 컴파일 시점에 값이 정해지지 않은 전역변수가 위치하는 메모리 영역(선언만 하고 초기화 하지 않은 전역 변수들)

이 세그먼트는 시작될 때 모두 0으로 초기화 (읽기 및 쓰기 권한 부여)

초기화 하지 않은 bss_data가 위치

 

 

스택 세그먼트

: 프로세스의 스택이 위치하는 영역(임시 변수들이 실행 중에 저장되는 곳)

스택 프레임(함수가 호출될 때 생성, 반환될 때 해제)이라는 단위로 사용 -> 프로세스가 얼마 만큼의 스택 프레임을 사용하게 될지 계산하지 못함 -> 시작할 때 작은 크기의 스택 세그먼트 할당 후 확장

(CPU가 자유롭게 값을 읽고 쓸 줄 알아야하므로 읽기와 쓰기 권한이 부여)

 

choice가 스택에 저장

 

 

 

힙 세그먼트

: 힙 데이터가 위치하는 세그먼트

동적 할당이 가능하며(C언어에서 malloc()과 calloc() 등) 스택 세그먼트와 반대로 자라남.

읽기와 쓰기 권한 부여

 

 

heap_data_ptr에 malloc()으로 동적 할당한 영역의 주소를 대입하고 이 영역에 값을 씀. malloc으로 할당받은 힙 세그먼트 주소를 가르킴.

 

 

정리 

 

 

 

 

 

 

 

'System & Reversing 필기' 카테고리의 다른 글

DreamHack Stage2( x86 Assembly)  (0) 2023.05.01
DreamHack Stage2(컴퓨터 구조)  (0) 2023.05.01
BoF  (0) 2023.03.18
x86, x64 레지스터  (0) 2023.03.18
어셈블리어 명령어 정리  (0) 2023.03.12
profile

ch@e

@ch@e

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그