본문 바로가기

Work & Study/Study

[Reversing] Register - 레지스터

반응형

이번 소단원에서 진수변환법과 어셈블리에서 쓰이는 간단한 명령어도 설명하였으나 생략하겠습니다.

진수변환 같은 경우엔 컴퓨터공학개론 / 디지털 논리 등을 보면 잘 설명되어 있습니다.

어셈블리 명령어는 어셈러브를 참고해주세요.

그럼 레지스터 시작하겠습니다.

 

1레지스터란 무엇인가

레지스터란 쉽게 말해 CPU 내부에 존재하는 고속의 작은 메모리를 말합니다.

종류로는 범용, 세그먼트, 상태 플래그, 명령 포인터 레지스터가 존재하고 있습니다.

 

? 이러한 레지스터들이 모인 CPU는 어떠한 방법으로 명령어를 수행할까

CPU의 명령어 실행주기는 크게 나누어 3단계로 이루어져 있으며 경우에 따라 5단계로 분류하기도 합니다.

 

3단계

 

Fetch(추출)

명령어를 메모리로부터 CPU로 가져오고 Program Counter를 하나 증가시킵니다.

 

Decode(해석)

가져온 명령어가 어떤 명령어인지 해석하고 실행될 명령어의 타입을 결정합니다.

 

Execute(실행)

명령어를 실행 후 상태 플래그의 정보를 갱신합니다.

 

5단계

Fetch => Decode => Fetch operand => Execute => Store output operand

 

Fetch operand(피연산자 추출)

피연산자가 필요한 경우 제어장치는 메모리로부터 피연산자를 추출하기 위해 읽기 동작을 실행합니다.

 

Store output operand(출력 피연산자 저장)

출력된 피연산자가 메모리에 있다면 제어장치에서 데이터 저장을 위한 쓰기동작을 실행합니다.

 

2. 레지스터의 종류

레지스터의 종류에는 위에서 설명한 것과 같이 다음 네가지 종류로 나누어 집니다.

 

범용 레지스터

 

레지스터

비 고

EAX

곱셈과 나눗셈에 사용, 함수의 리턴값을 저장

EBX

ESI / EDI 와 결합하여 Index에 사용된다

ECX

Loop conuter 로 사용된다

EDX

EAX와 병행사용 되며. 부호 확장명령 등에 사용

ESI

복사할 데이터의 주소 값을 저장

EDI

복사할 데이터를 받을 주소 값을 저장

ESP

Stack frame 의 끝 주소 저장, PUSH,POP 때마다 4byte씩 변화

EBP

Stack frame의 시작주소 저장, 현재 사용중인 Stack frame 소멸 시 변화

 

세그먼트 레지스터

 

레지스터

비 고

CS

실행 가능한 명령어의 OFFSET 값을 저장

DS

프로그램이 사용되는 데이터의 OFFSET 값을 저장

SS

Stack이 존재하는 세그먼트의 OFFSET 값을 저장

 

상태플래그 레지스터

 

레지스터

비 고

CF

캐리가 발생하면 상태가 1로 변화(EX : 이진수 1 에 1을 더할 때 BIT = 0 CF = 1)

ZF

연산의 결과값이 '0' 이 나오면 상태가 1로 변화

OF

부호가 있는 연산자의 결과값이 저장용량보다 클 때(OVER FLOW)

SF

연산의 결과값이 음수일 때 상태가 1 로 변화

DF

연속된 문자열의 처리방법에 따라 상태가 변화

 

명령포인터 레지스터

 

레지스터

비 고

EIP

다음에 실행될 명령어의 메모리 주소를 저장

현재 실행중인 명령어가 종료되면 EIP의 저장 값을 Return

저장하고 있던 주소가 활성화 되면 다음 명령어의 주소 값을 저장

 

3. 레지스터의 크기

EAX, EBX 등 레지스터의 앞에 'E' 가 붙은 레지스터들은 Extended(확장된) 의 약자로서 대부분 32bit 입니다.

EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP…..

 

앞에 'E' 가 붙어있지 않은 레지스터들은 16bit값을 가집니다.

AX, BX, CX, DX, SI, DI, SP, BP

 

16bit 레지스터들중 일부는 다시 상하로 나뉘어져 8bit 값을 가지게 됩니다.

AH, AL, BH, BL, CH, CL, DH, DL

 

32 bit register

16 bit register

 

8bit register

8bit register

 

참고도서

지앤선    리버스엔지니어링 : 역분석 구조와 원리 (박병익 / 이강석 저)

교보문고    어셈블리언어 제 4판 (KIP R. IRVINE 저)

반응형