SSDD
[Reversing] - X86-64 CPU 레지스터 본문
레지스터의 개념
CPU가 요청을 처리하는데 필요한 데이터를 임시로 저장하는 공간
레지스터의 종류
- 범용 레지스터 (General Register)
- 세그먼트 레지스터 (Segment Register)
- 인덱스 레지스터 (Index Register)
- 플래그 레지스터 (Flag Register)
- 포인터 레지스터 (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 |