1. 레지스터란?
- CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치
- 메모리로 연산의 결과를 보내고 영구적으로 저장할 데이터를 하드디스크에 저장하는 등의 명령 처리
- 연산 속도가 메모리보다 훨씬 빠르며 특정 주소를 가리키거나 값을 읽어올 수 있음
- 컴퓨터의 bit가 클수록 처리속도가 빠름
- 어셈블리에서 레지스터란 CPU가 사용하는 변수를 의미
2. 레지스터의 종류
1) 범용 레지스터 (General Purpose Register)
- 작은 데이터의 임시 저장 공간
- 연산 처리 및 번지 지정을 도와주며 컴퓨터의 장치를 제어함
종류 | 특징 |
EAX (Accumulator) |
- 누산기 레지스터로 입출력, 산술연산, 논리연산을 수행 - 함수의 리턴 값 저장 - AX는 EAX의 오른쪽 16비트 부분 - AH는 AX의 왼쪽 8비트 상위부분, AL은 AX의 오른쪽 8비트 하위부분 |
EBX (Base address) |
- 주소 지정을 확장하기 위해 인덱스로서 사용하는 레지스터 - BX는 EBX의 오른쪽 16비트 부분 - BH는 BX의 왼쪽 8비트 상위부분, BL은 BX의 오른쪽 8비트 하위부분 |
ECX (Counter) |
- 반복문을 수행할 때 반복 횟수를 지정하는데 사용 - CX는 ECX의 오른쪽 16비트 부분 - CH는 CX의 왼쪽 8비트 상위부분, CL은 CX의 오른쪽 8비트 하위부분 |
EDX (Data) |
- 큰 수의 산술연산, 논리연산을 할 때 EAX의 보조적 역할로 사용 - EAX 레지스터와 같이 쓰임 - 부호 확장 명령 등에 사용 - DX는 EDX의 오른쪽 16비트 부분 - DH는 DX의 왼쪽 8비트 상위부분, DL은 DX의 오른쪽 8비트 하위부분 |
2) 포인터 레지스터 (Pointer Register)
- 메모리 스택 영역과 관련된 주소 값을 나타냄
종류 | 특징 |
ESP (Extended Stack Pointer) | - 스택 영역의 최상단을 가리킴 |
EBP (Extended Base Pointer) | - 스택 영역의 기준이 되는 주소를 가리킴 |
EIP (Extended Instruction Pointer) | - 다음 실행할 명령이 들어 있는 메모리의 주소를 가리킴 |
3) 인덱스 레지스터 (Index Register)
- 문자열을 복사/비교
- 인덱스 주소지정과 덧셈, 뺄셈에서 사용 가능
종류 | 특징 |
ESI (Extended Source Index) | - 복사/비교의 대상의 주소를 가리킴 |
EDI (Extended Destination Index) | - 복사/비교를 할 곳의 주소를 가리킴 |
4) 세그먼트 레지스터 (Segment Register)
- 다양한 크기로 구분을 하는 목적으로 사용
- 16비트로 구성
종류 | 특징 |
CS (Code Segment) | - 함수와 제어문 같은 명령어들이 저장되는 코드 세그먼트 |
DS (Data Segment) | - 전역, 정적 변수 데이터가 들어있는 데이터 세그먼트 |
SS (Stack Segment) | - 주소와 데이터를 일시적으로 저장할 목적으로 쓰이는 세그먼트 - 스택의 주소를 지정하는데 사용 |
ES (Extra Segment) | - 추가 레지스터로 문자 데이터의 주소를 지정하는데 사용 |
5) 플래그 레지스터 (Extended Flags Register)
- 실행 순서를 제어하기 위한 목적으로 사용
- 플래그를 1로 설정하는 것을 SET, 0으로 설정하는 것을 CLEAR 또는 RESET이라고 함
종류 | 특징 | |
상태플래그 | CF (Carry Flag) | - 산술 연산 후 상위 비트의 캐리를 포함 - 자리이동 또는 회전연산 후 마지막의 비트내용을 포함 |
PF (Parity Flag) | - 연산 결과 1비트들의 개수에 따라 짝수 패리티와 홀수 패리티로 나타냄 | |
OF (Overflow Flag) | - 산술 연산 후 상위비트의 오버플로우를 나타냄 | |
AF (Auxiliary Flag) | - 특수화된 산술에서 사용 - 비트 3에서 비트 4로의 캐리를 포함 |
|
ZF (Zero Flag) | - 산술이나 비교 연산의 결과를 나타냄 | |
SF (Sign Flag) | - 산술 연산의 결과값에 대한 부호를 포함 | |
제어플래그 | DF (Direction Flag) | - 스트링 데이터를 이동시키거나 비교할 때 방향 결정 |
시스템플래그 | TF (Trap Flag) | - 단일 단계 모드의 프로세서 연산 허용 |
IF (Interrupt Flag) | - 키보드 입력과 같은 외부 인터럽트의 처리 여부를 나타냄 |
'2020 WINTER STUDY > CTF Study' 카테고리의 다른 글
[Reversing] Day 10_CodeEngn Basic RCE L17 (0) | 2021.02.26 |
---|---|
[Reversing] Day 9_CodeEngn Basic RCE L07 (0) | 2021.02.25 |
[Reversing] Day 8_CodeEngn Basic RCE L15 (0) | 2021.02.25 |
[Reversing] Day 7_CodeEngn Basic RCE L09 (0) | 2021.02.24 |
[Reversing] Day 7_CodeEngn Basic RCE L04 (0) | 2021.02.24 |