본문 바로가기

Pwnable/개념

[Pwnable] Dreamhack STAGE 1 ~ 3

# 필요하다고 생각되는 부분들만 정리해서 그 외의 내용들은 글에는 포함되지 않았을 수 있다...!

 

https://dreamhack.io/lecture/roadmaps/2

 

System Hacking

시스템 해킹을 공부하기 위한 로드맵입니다.

dreamhack.io


<Computer Architecture>

- 범용 레지스터

이름 주용도
rax
(accumulator register)
함수의 반환 값
rbx
(base register)
X64에서는 주된 용도 x
rcx
(counter register)
반복문의 반복 횟수, 각종 연산의 시행 횟수
rdx
(data register)
X64에서는 주된 용도 x
rsi
(source index)
데이터를 옮길 때 원본을 가리키는 포인터
rdi
(destination index)
데이터를 옮길 때 목적지를 가리키는 포인터
rsp
(stack pointer)
사용중인 스택의 위치를 가리키는 포인터
rbp
(stack base pointer)
스택의 바닥을 가리키는 포인터

- 세그먼트 레지스터

- 명령어 포인터 레지스터 : rip(8바이트)

- 플래그 레지스터 : CF, ZF, SF, OF

 

<Linux Memory Layout>

- 세그먼트(segment) : 적재되는 데이터의 용도별로 메모리의 구획을 나눈 것

- 리눅스: 코드 세그먼트 / 데이터 세그먼트 / bss 세그먼트 / 힙 세그먼트 / 스택 세그먼트

 

* 코드 세그먼트(텍스트 세그먼트)

: 실행 가능한 기계 코드가 위치하는 영역

: 읽기 권한 + 실행 권한

 

* 데이터 세그먼트

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

: 읽기 권한

: data세그먼트(쓰기가 가능+값이 변할 수 o) / rodate(read-only data) 세그먼트(값이 변하면 안 되는 데이터 / 전역으로 선언된 상수)

 

* BSS 세그먼트

: 컴파일 시점에 값이 정해지지 않은 전역 변수가 위치하는 메모리 영역

: 개발자가 선언만 하고 초기화하지 않은 전역변수 등이 포함

: 프로그램이 시작될 때 모두 0으로 초기화

 

* 스택 세그먼트

: 프로세스의 스택이 위치하는 영역 / 함수의 인자나 지역 변수와 같은 임시 변수들이 실행 중에 여기에 저장

: 단위 : “스택 프레임” / 함수가 호출될 때 생성되고, 반환될 때 해제됨

: 스택 ->  스택이 확장될 때 기존 주소보다 낮은 주소로 확장됨

: 읽기 권한 + 쓰기 권한

 

* 힙 세그먼트

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

: 실행 중에 동적으로 할당될 수 있으며, 리눅스에서는 스택 세그먼트와 반대 방향으로 자람

: C언어 malloc(), calloc() 등

: 읽기 권한 + 쓰기 권한

'Pwnable > 개념' 카테고리의 다른 글

[Pwnable] Dreamhack STAGE 8  (0) 2022.08.26
[Pwnable] Dreamhack STAGE 8  (0) 2022.08.26
[Pwnable] Dreamhack STAGE 7  (0) 2022.08.26
[Pwnable] Dreamhack STAGE 6  (0) 2022.08.25
[Pwnable] Dreamhack STAGE 5  (0) 2022.08.25