컴퓨터 구조 💻
컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이를 구성하는 방법
- 컴퓨터 기능 구조에 대한 설계
- CPU의 명령어에 대한 설계
- CPU의 하드웨어적 설계
폰 노이만 구조
폰 노이만은 컴퓨터에 연산, 제어, 저장의 세 가지 핵심 기능이 필요하다고 생각함.
연산과 제어 → 중앙처리장치 (Central Processing Unit, CPU)
저장 → 기억장치 (Memory)
버스(bus) = 장치간의 데이터나 제어 신호를 교환할 수 있도록하는 전자 통로
CPU 🧠
- CPU는 프로그램의 연산을 처리하고 시스템을 제어하는 컴퓨터의 두뇌
|
ALU, Arithmetic Logic Unit (산술논리장치)
|
산술/논리 연산을 처리하는 장치
|
|
Control Unit (제어장치)
|
CPU를 제어하는 제어장치
|
|
Register (레지스터)
|
CPU에 필요한 데이터를 저장함
|
- CPU의 연산속도는 주기억장치 및 보조기억장치와의 데이터 교환 속도보다 압도적으로 빠르기 때문에 이들만 사용하면 병목현상이 발생함
- CPU는 데이터의 교환속도를 획기적으로 단축하기 위해 Register와 Cache라는 저장장치를 가지고 있다
Memory 💾
- 컴퓨터가 동작하는데 필요한 여러 데이터를 저장하기 위해서 사용됨
- 주기억장치 - 프로그램 실행과정에서 필요한 데이터를 임시로 저장 ex) RAM
- 보조기억장치 - 데이터를 장기간 보관하고자 할 때 사용 ex) HDD, SSD
Bus 🚌
- 컴퓨터 부품과 부품 사이 또는 컴퓨터와 컴퓨터 사이에 신호를 전송하는 통로
|
Data Bus
|
데이터가 이동하는 버스
|
|
Address Bus
|
주소를 지정하는 버스
|
|
Control Bus
|
읽기/쓰기를 제어하는 버스
|

Instruction Set Architecture, ISA (명령어 집합 구조)
CPU가 해석하는 명령어의 집합
- 다양한 ISA가 개발되고 사용되는 이유는 모든 컴퓨터가 동일한 수준의 연산 능력을 요구하지 않으며, 컴퓨팅 환경도 다양하기 때문
- x86-64는 고성능 프로세서를 설계하기 위해서 사용
x86-64 아키텍처
n 비트 아키텍처
- n은 CPU가 한번에 처리할 수 있는 데이터의 크기
- WORD = CPU가 이해할 수 있는 데이터의 단위
WORD가 크면 유리한 점
- 가상 메모리의 크기가 커짐
x86-64 아키텍처: 레지스터
Register는 CPU 내부의 저장장치로, CPU가 빠르게 접근하여 사용할 수 있다.
산술 연산에 필요한 데이터를 저장하거나 주소를 저장하고 참조하는 등 다양한 용도로 사용됨
General-Purpose Register 범용 레지스터 🧺
- 주용도가 있기는 하나, 그 외 임의의 용도로 사용될 수 있다
- 8byte = 64bit 저장
- 부호 없는 정수 2^64 - 1까지 나타낼 수 있음

Segment Register 세그먼트 레지스터 🗂
- cs, ss, ds / es, fs, gs
- 각 레지스터의 크기는 16bit
- x64에서 cs, ds, ss 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작된 세그먼트 레지스터
Instruction Pointer Register, IP 명령어 포인터 레지스터 👇
- CPU가 어느 부분의 코드를 실행할지 가리키는 레지스터
- x64 아키텍처의 명령어 레지스터는 rip
- 크기는 8byte
Flag Register 플레그 레지스터 🏳️🏴
- 프로세서의 현재 상태를 저장하고 있는 레지스터
- x64 아키텍처에서는 RFLAGS라고 불리는 64bit 크기의 플래그 레지스터가 존재하며, 과거 16비트 플래그 레지스터가 확장된 것

- RFLAGS는 64비트이므로 최대 64개의 플래그를 사용할 수 있지만, 실제로는 오른쪽의 20여개의 비트만 사용합니다.

레지스터 호환


'Reversing > Dreamhack : Reverse Engineering' 카테고리의 다른 글
| Quiz: x86 Assembly 1 (0) | 2025.04.16 |
|---|---|
| x86 Assembly🤖: Essential Part (0) | 2025.04.16 |
| Background: Windows Memory Layout (0) | 2025.04.16 |
| Background: Static Analysis vs. Dynamic Analysis (0) | 2025.04.16 |
| Background : Binary (0) | 2025.04.16 |