Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

SSDD

[Reversing] - X86-64 CPU 레지스터 본문

Reversing

[Reversing] - X86-64 CPU 레지스터

sadic 2024. 5. 19. 21:49

레지스터의 개념

CPU가 요청을 처리하는데 필요한 데이터를 임시로 저장하는 공간


레지스터의 종류

  1. 범용 레지스터 (General Register)
  2. 세그먼트 레지스터 (Segment Register)
  3. 인덱스 레지스터 (Index Register)
  4. 플래그 레지스터 (Flag Register)
  5. 포인터 레지스터 (Pointer Register)

 

범용 레지스터 

연산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등 다양한 용도로 사용되는 다목적 레지스터

32bit 기준

EAX = 결과 , 연산 값 레지스터
EBX = 베이스 , 독립 변수
ECX = 카운트 레지스터 , 숫자
EDX = 데이터 , 독립 변수 

64bit는 E가 아닌 R을 사용 
(EAX -> RAX) 
(EBX -> RBX)

 


 

세그먼트 레지스터

프로그램에 정의한 메모리상의 특정 영역, 코드, 데이터, 스택 등을 포함하는 레지스터

6가지 세그먼트 레지스터가 존재, 각 레지스터의 크기는 16비트
CS, DS, SS 레지스터는 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용

CS (Code Segment) : 현재 프로그램의 코드가 포함된 세그먼트의 주소를 저장하는 레지스터
DS (Data Segment) : 데이터가 포함된 세그먼트의 주소를 저장하는 레지스터
SS (Stack Segment) : 스택이 포함된 세그먼트의 주소를 저장하는 레지스터

ES, FS, GS : 문자 연산과 추가 메모리를 지정하는데 사용되는 레지스터

 

인덱스 레지스터

데이터를 복사할 때 출발지와 목적지 주소를 가리키는 레지스터 

ESI (Source Index) : 출발지 주소 저장 
EDI (Destination Index) : 목적지 주소 저장

 

플래그 레지스터

OF (Overflow Flag)
2진수 1111 , 0001 더하기 4bit 연산인데 결과값은 5bit 이기에 표현할 수 있는 범위를 넘김 overflow
부호 있는 숫자의 연산 결과가 비트 범위를 넘어섰을 경우 참

CF (Carry Flag)
0111 , 0001 더하기 는 1000으로 자리올림이 발생 , overflow 발생x
부호 없는 숫자의 연산 결과가 비트 범위를 넘어섰을 경우 참

SF (Sign Flag)
논리연산 결과가 음수면 참

ZF (Zero Flag)
연산결과가 0일때 참

PF (Parity Flag)
연산결과가 1로된 bit의 개수가 짝수라면 참

 

포인터 레지스터

프로그램 실행 과정에서 사용하는  메모리 주소 값을 저장하는 레지스터

ESP (Stack Pointer) : (최상단) 가장 최근에 저장된 주소를 저장하는 레지스터
EBP (Base Pointer) : (최하단) 바닥 부분을 저장하는 레지스터
EIP (Instruction Pointer) : 다음 실행될 주소를 저장하는 레지스터

'Reversing' 카테고리의 다른 글

[Reversing] - 04.exe  (0) 2024.05.28
[Reversing] - 03.exe  (0) 2024.05.26
[Reversing] - 02.exe  (0) 2024.05.24
[Reversing] - 01.exe  (0) 2024.05.21
[Reversing] - 어셈블리어  (0) 2024.05.20