본문 바로가기

Reversing

리버싱 기초 지식 : 레지스터(Register)

레지스터(Register)란 무엇인가?

데이터 고속처리를 위해 중앙처리장치(CPU)에 들어 있는 소규모 데이터 기억장치이다.

일반 메모리 보다 빠른 속도를 가지고 있다.

산술/연산이나 정보해석, 전송등 을 할수 있는 일정 길이의 정보를 저장한다.

어셈블리에서 레지스터란? 변수는 변수인데, CPU가 사용하는 변수이다.

컴퓨터의 bit가 클수록 처리속도가 빠르다.

 

레지스터(Register)의 종류 와 특징

범용레지스터 - 계산, 메모리 어드레스 지정, 임시 저장공간등의 목적으로 사용되며 32bit로 구성된다.

종류

특징

EAX(32bit)

AX(16bit)

AH / AL(8bit)

누산기 레지스터로 대부분의 입출력과 산술, 논리연산을 수행한다.

함수의 리턴 값을 저장한다.

EBX(32bit)

BX(16bit)

BH / BL(8bit)

주소 지정을 확장하기 위해 인덱스로서 사용하는 레지스터이다.

ECX(32bit)

CX(16bit)

CH / CL(8bit)

반복문을 수행할 때 반복 횟수를 지정하는데 사용한다.

EDX(32bit)

DX(16bit)

DH / DL(8bit)

큰 수의 산술, 논리연산을 할 때 EAX의 보조적 역할로 사용된다.

 

포인터 레지스터 메모리 스택 영역과 관련된 주소 값을 나타낸다.

종류

특징

ESP

(Stack Pointer)

스택 영역의 최상단을 가리킨다.

EBP

(Base Pointer)

스택 영역의 기준이 되는 주소를 가리킨다.

 

인덱스 레지스터 문자열을 복사/비교와 관련된다.

종류

특징

ESI

(Source Index)

복사/비교의 대상의 주소를 가리킨다.

EDI

(Destination Index)

복사/비교를 할 곳의 주소를 가리킨다.

 

명령어 레지스터

종류

특징

EIP

(Instruction Pointer)

다음 실행할 명령이 들어 있는

메모리의 주소를 가리킨다.

 

세그먼트 레지스터 - 다양한 크기로 구분을 하는 목적으로 사용되며 16bit로 구성된다.

종류

특징

CS

함수와 제어문 같은 명령어들이 저장되는 코드 세그먼트이다.

DS

전역, 정적 변수 데이터가 들어있는 데이터 세그먼트이다.

SS

주소와 데이터를 일시적으로 저장할 목적으로 쓰이는

스택의 주소를 지정하는데 사용된다.

ES

추가 레지스터로 문자 데이터의 주소를 지정하는데 사용된다.

 

플래그 레지스터(EFLAGS) - 실행 순서를 제어하기 위한 목적으로 사용된다.

종류

특징

OF

산술 연산 후 상위비트의 오버플로를 나타낸다.

DF

스트링 데이터를 이동시키거나 비교할 때 방향을 결정한다.

IF

키보드 입력과 같은 외부 인터럽트의 처리 여부를 나타낸다.

TF

단일 단계 모드의 프로세서 연산을 허용한다.

SF

산술 연산의 결과 값에 대한 부호를 포함한다.

ZF

산술이나 비교 연산의 결과를 나타낸다.

AF

특수화된 산술에서 사용되며,

비트 3에서 비트4로의 캐리를 포함한다.

PF

연산 결과 1비트들의 개수에 따라

짝수 패리티와 홀수 패리티로 나타낸다.

CF

산술 연산 후 상위 비트의 캐리를 포함한다.

자리이동 또는 회전연산 후 마지막의 비트내용을 포함한다.