컴퓨터 구조(Computer Architecture)
: 컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법
컴퓨터 기능 구조에 대한 설계, 명령어 집합 구조, 마이크로 아키텍처, 그리고 기타 하드웨어 및 컴퓨팅 방법에 대한 설계 등이 포함
- 컴퓨터 기능 구조에 대한 설계: 컴퓨터가 연산을 효율적으로 하기 위해 어떤 기능들이 컴퓨터에 필요한지 고민하고, 설계하는 분야
- 명령어 집합 구조(Instruction Set Architecture): CPU가 처리해야 하는 명령어를 설계하는 분야
- 마이크로 아키텍처(Micro Architecture): CPU의 하드웨어적인 설계, 명령어 집합을 효율적으로 처리할 수 있도록, CPU의 회로를 설계하는 분야
x86-64(=amd64) 아키텍처
- n비트 아키텍처에서 n은 CPU가 한번에 처리할 수 있는 데이터의 크기, CPU가 이해할 수 있는 데이터의 단위라는 의미에서 WORD라 함
- 일반적인 32비트 아키텍처에서 ALU는 32비트까지 계산할 수 있으며, 레지스터의 용량 및 각종 버스들의 대역폭이 32비트임
- 32비트 아키텍처의 CPU가 제공할 수 있는 가상메모리의 크기는 4GB로 부족함
- 64비트 아키텍처에서는 이론상 16엑사바이트(16,777,216TB)의 가상메모리를 제공해, 웬만하면 완전한 사용이 불가능할 정도로 큰 크기임
x86-64 아키텍처의 레지스터
- 레지스터는 CPU가 데이터를 빠르게 저장하고 사용할 때 이용하는 보관소로, 산술 연산에 필요한 데이터를 저자하거나 주소를 저장하고 참조하는 등 다양한 용도로 사용됨
- 범용 레지스터, 세그먼트 레지스터, 명령어 포인터 레지스터, 플래그 레지스터가 존재함
- 범용 레지스터: 주용도는 있으나, 그 외 다양한 용도로 사용 가능한 레지스터 (8바이트 저장 가능)
- rax(accumulator register): 함수의 반환값
- rbx(base register): 주 용도 x
- rcx(counter register): 반복문의 반복 횟수, 각종 연산의 시행 횟수
- rdx(data register): 주 용도 x
- rsi(source index): 데이터를 옮길 때 원본을 가리키는 포인터
- rdi(destination index): 데이터를 옮길 때 목적지를 가리키는 포인터
- rsp(stack pointer): 사용중인 스택의 위치를 가리키는 포인터
- rbp(stack base pointer): 스택의 바닥을 가리키는 포인터
- 세그먼트 레지스터: 16비트 크기
- x64 아키텍처에는 cs, ss, ds, es, fs, gs 6가지 존재
- cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고 나머지는 운영체제별 용도를 결정할 수 있도록 범용적 용도로 제작됨
- 명령어 포인터 레지스터: CPU가 어느 부부의 코드를 실행할 지 가리키는 역할
- x64 아키텍처에서는 rip, 8바이트 크기
- 플래그 레지스터: 프로세서의 현재 상태를 저장하고 있는 레지스터
- x64 아키텍처에서는 RFLAGS라고 불리는 64비트 크기의 플래그 레지스터 존재
- RFLAGS는 64비트이므로 최대 64개의 플래그를 사용할 수 있지만, 실제로는 아래 그림의 20여개 비트만을 사용
레지스터 호환
- x86-64 아키텍처는 IA-32의 64비트 확장 아키텍처이며, 호환이 가능함
- IA-32의 레지스터는 32비트 크기, eax, ebx, ecx, edx, esi, edi, esp, ebp
- eax, ebx 등은 확장된 레지스터의 하위 32비트를 가리킴 ex> eax는 rax의 하위 32비트를 의미
드림핵 시스템해킹 로드맵 참고
'보안' 카테고리의 다른 글
[시스템해킹] NX & ASLR (0) | 2024.04.23 |
---|---|
[시스템해킹] Background: Calling Convention(함수 호출 규약) (0) | 2024.04.23 |
[시스템해킹] Background: x86 Assembly (0) | 2024.04.23 |
[시스템해킹] Background: Linux Memory Layout (0) | 2024.04.23 |
[시스템해킹] 드림핵 워게임 basic_exploitation_000 (1) | 2024.04.03 |