상세 컨텐츠

본문 제목

CPU 레지스터 (CPU Register)

REVERSING/Reversing Study

by koharin 2021. 3. 26. 21:06

본문

728x90
반응형

Register


  • CPU 내 고속의 저장 공간

 

범용 레지스터(General-Purpose Registers, GPR)


  • 다양한 용도로 사용되는 레지스터로, 관행적으로 용도가 있다.
  • x64 기준 16개의 범용 레지스터가 있다.
rax rcx rdx r8 r9 r10 r11 rbx rsi rdi rbp r12 r13 r14 r15 rsp

 

rax

  • 함수 종료 후 해당 함수의 리턴값이 저장되는 레지스터

 

rcx, rdx, r8, r9

  • Window 64bit에서 함수 호출 시 필요한 인자들을 차례로 저장한다.

 

rsp

  • Stack Pointer
  • 스택 가장 위 주소를 가리킨다.

 

명령어 포인터(Instruction Pointer)


rip

  • 명령어 포인터(Instruction Pointer)
  • 다음에 실행할 명령어가 저장된 주소를 가리킨다.
  • 범용 레지스터가 아니다.

 

Data Size


WORD

  • CPU가 사용하는 값의 크기의 단위
  • 16bit 크기

DWORD

  • 32bit(4byte) 크기

QWORD

  • 64bit(8byte) 크기
  • x64 (64bit CPU) 레지스터들이 담을 수 있는 값의 크기

rcx

  • 레지스터에 저장된 값 중 하위 32bit 또는 하위 16bit나 하위 8bit(1byte)만 연산에 사용하는 것이 가능하다.
  • 레지스터의 하위 32bit에 접근할 때 ecx, 하위 16bit에 접근할 때 cx를 사용한다.

r8 ~ r15

  • x64 범용 레지스터
  • 하위 일부 비트만 접근할 때 사용할 수 있다.
  • r8의 경우 하위 32bit, 16bit, 8bit에 접근할 때 각각 r8d, r8w, r8b 레이스터 이름을 사용한다.
    • r8d에서 d는 dword, w은 word, b는 byte의 약자인듯
  • d, w, b 접미사 붙이는 방식은 r8~r15에서 동일하게 사용한다.

 

상태 레지스터 FLAGS


  • 현재 상태나 조건을 0과 1로 나타내는 레지스터
  • 64bit에서 각 한 비트씩은 서로 다른 상태를 나타낸다.

CF (Carry Flag)

  • 연산 시 자리 올림(carry) 생기는 경우 CF = 1
  • 부호 없는(unsigned) 값의 연산에 쓰인다.

ZF (Zero Flag)

  • 연산 결과가 0일 때 ZF = 1

SF (Sign Flag)

  • 부호 있는(signed) 값의 연산에 쓰인다.
  • 결과가 양수이면, 즉 최상위 비트가 0이면 SF = 0
  • 결과가 음수이면, 즉 최상위 비트가 1이면 SF = 1

OF (Overflow Flag)

  • 부호 있는(signed) 연산에서 자리 올림을 OF로 표현한다. (CF 역할)
  • 부호 있는 값 대상 산술연산에서 자리 올림은 표시할 수 있는 값의 범위를 넘어간 overflow를 의미한다.
728x90
반응형

관련글 더보기