[Dreamhack] Computer Architecture

·2024년 1월 27일

Security

목록 보기
1/60

컴퓨터 구조와 레지스터

1. 컴퓨터 구조 (Computer Architecture)

  • 기능 구조의 설계 : 폰 노이만 구조
    - 중앙처리장치(CPU) : 산술논리장치, 제어장치, 레지스터
    • 기억장치 : 주기억장치(ex. RAM), 보조기억장치(ex. HDD, SSD)
    • 버스(Bus) : 데이터 버스, 주소 버스, 제어 버스
  • 마이크로 아키텍처 : CPU의 하드웨어적 설계
    : 캐시 설계, 파이프라이닝, 슈퍼 스칼라, 분기 예측, 비순차적 명령어 처리
  • 하드웨어 및 컴퓨팅 방법론 : 직접 메모리 접근

2. 명령어 집합 구조 (Instruction Set Architecture, ISA)

: CPU가 해석하는 명령어의 집합, ex. x86, x86-64, ARM, MIPS, AVR

↓ x86-64 아키텍처 기준

3. 범용 레지스터 (General Register)

: 8byte 저장가능, 부호 없는 정수 기준으로 2
64-1까지의 수 나타낼 수 있음

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

4. 세그먼트 레지스터 (Segment Register)

: 각 레지스터의 크기는 16bit, 총 6가지 seg register 존재 (cs, ss, ds, es, fs, gs)

5. 플래그 레지스터 (Flag Register)

: CPU의 상태를 저장함, RFLAGS라고 불리는 64bit 크기의 플래그 레지스터 존재

플래그의미
CF(Carry Flag)부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정
ZF(Zero Flag)연산의 결과가 0일 경우 설정
SF(Sign Flag)연산의 결과가 음수일 경우 설정
OF(Overflow Flag)부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정

6. 명령어 포인터 레지스터 (Instruction Pointer Register, IP)

: CPU가 어느 부분의 코드를 실행할 지 가리킴, x64에선 rip, 크기는 8byte

레지스터 호환

: 64bit -> 32bit(EAX) + 32bit
: 32bit(EAX) -> 16bit(AX) + 16bit
: 16bit(AX) -> 8bit(AH) + 8bit(AL)

  • bit : 2진수
  • byte : 8bit==1byte, 10진수 0~255, 16진수 0~0xFF

profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글