레지스터


레지스터란?

중앙처리장치(CPU)가 데이터를 처리하는 동안 중간 결과를 일시적으로 저장해 두는 고속 기억장치를 말한다.

중앙처리장치 내부에는 각 용도에 맞는 다양한 레지스터가 존재하며 연산처리 및 주소지정을 도와준다. 

크기는 레지스터마다 다르지만, 보통 32bit(4byte) 이다.


범용 레지스터


EAX

 EBP

EBX

 ESP

ECX

ESI

EDX

EDI


EAX, EBX, ECX, EDX 레지스터

EAX, EBX, ECX, EDX 레지스터는 위와 같이 나누어 사용 할 수 있다.


16bit 운영체제 시절에는 AX, BX, CX, DX와 같이 레지스터에 E를 붙이지 않고 불렀지만 

32bit로 확장되면서 E(Extended)가 앞에 붙어 EAX, EBX, ECX, EDX 등으로 부른다.

 64bit 경우에는 E대신 R을 붙인다. AX 레지스터의 상위부분(High)AH라고 하고 하위부분(Low)AL이라고 한다.


EAX (Extended Accumulator Register)

: 누산기 기능

: 산술·논리연산 저장

: 함수가 호출될 시 리턴 값이 저장되는 공간


EBX (Extended Base Register)

: 간접 주소 지정 시 사용된다. (특정 주소 저장)

: 산술·논리연산 저장


ECX (Extended Counter Register)

: 명령의 반복수행이 필요로 할 때 반복횟수 지정에 주로 사용

: ECX에 넣은 값은 한번 반복될 때 마다 1씩 감소하며 ECX > 0 조건을 만족할 때까지 반복


EDX (Extended Data Register)

: EAX 보조 역할(곱셈, 나눗셈을 할 때 보조 누산기로 사용)

: EAX에 들어가는 리턴 값이 32bit를 넘을 경우 나머지를 EDX에 저장


포인터 레지스터 //스택과 관련이 있는 레지스터


EBP (Extended Base Pointer)

: 스택프레임의 기준점이 된다.

: 스택 프레임을 사용하는 동안 EBP의 값은 변하지 않고 스택 프레임이 소멸되면 이전의 스택 프레임을 가리키게 된다.


ESP (Extended Stack Pointer)

: 스택프레임의 최상단의 주소를 가지고 있다.

: 현재까지 사용된 스택의 위치를 저장하는데 사용된다.


EIP (Extended Instruction Pointer)

: 다음에 실행할 명령어의 주소를 가지고 있다.

: CS 세그먼트 레지스터와 한 쌍이 되어 실행주소를 참조한다.

: 버퍼 오버플로우 공격에 사용되는 레지스터


인덱스 레지스터 //문자열과 관련이 있는 레지스터


ESI (Extended Source Index)

: 복사 혹은 비교를 하는데 사용되는 출발지의 문자열 주소가 들어간다.

EDI (Extended Destination Index)

: 복사 혹은 비교를 하는데 사용되는 도착지의 문자열 주소가 들어간다.


플래그 레지스터 //연산 결과 및 시스템 상태와 관련된 여러 가지 플래그 값을 저장하는 레지스터


EFLAGS (Extended FLAGS) 상태 값이 0이면 Clear 1이면 Set이라고 한다.


상태 플래그(Status Flag)

AF(Auxiliary carry Flag) : 10진수 연산에서 자리 올림/내림이 발생할 때 Set(1) 된다.

CF(Carry Flag) : 연산 결과, 자리 올림/내림이 발생할 때 Set(1) 된다.

OF(Overflow Flag) : 정수형 결과 값이 너무 큰 양수이거나 너무 작은 음수여서 피연산자 데이터 타입에 들어가지 않을 경우 Set(1)된다.

PF(Parity Flag) : 연산 결과, 1(binary)의 개수가 짝수 개일 때 Set(1) 홀수 개일 때 Clear(0)이다.

SF(Sign Flag) : 연산 결과, 최상위비트가 1일 때(음수) Set(1)되고, 양수이면 Clear(0)이다.

ZF(Zero Flag) : 연산 결과, 0이면 Set(1)되고 아니면 Clear(0)된다.


세그먼트 레지스터 //세그먼트 영역의 메모리에 주소를 지정하며 크기는 16bit


CS (Code Segment) : 코드 세그먼트의 시작 주소를 가리키며, Instruction Pointer(IP) 레지스터가 가진 offset 값과 합쳐서 실행을 위한 명령어의 주소를 참조

DS (Data Segment) : 데이터 세그먼트의 시작 주소를 가리키며, AX, CX, DX, SI, DI 레지스터와 합쳐서 데이터 영역의 주소를 참조하게 된다.

SS (Stack Segment) : 스택 세그먼트의 시작 주소를 가리키며, SP 혹은 BP 레지스터와 합쳐서 스택 영역의 주소를 참조하게 된다.

ES(Extra Segment) : 데이터 관련 확장 레지스터로 주로 문자 데이터의 주소를 지정하는데 사용한다.

FS : 데이터 관련 확장 레지스터로 TIB(Thread Information Block)의 정보를 가지고 있다.

GS : 데이터 관련 확장 레지스터

'보안 > 리버싱' 카테고리의 다른 글

Reversing -3 함수호출규약  (0) 2017.02.01
Reversing -1 어셈블리언어  (0) 2016.05.16

+ Recent posts