티스토리 뷰

리버싱/개념

레지스터

로또_ 2020. 1. 7. 15:10

 

-목차-

 

1. 범용 레지스터

2. 명령 포인터 레지스터

3. Segment Register

 


 

 

범용 레지스터

범용적으로 사용되는 레지스터들입니다. IA-32에서 각 범용 레지스터들의 크기는 32비트입니다.

EAX(Extended Accumulator Register)

산술 연산 명령에서 상수/변수 값을 저장하거나 함수의 리턴 값이 저장되는 용도로 사용됩니다.

 

EBX(Extended Base Register)

EBX는 DS 세그먼트에 대한 포인터를 주로 저장하고 ESI나 EDI와 결합하여 인덱스에 사용됩니다. EBX는 메모리 주소 지정을 확장하기 위해 인덱스로 사용될 수 있는 유일한 범용 레지스터입니다.

 

ECX(Extended Counter Register)

반복 명령어 사용 시 반복 카운터로 사용됩니다. ECX 레지스터에 반복할 횟수를 지정해 놓고 반복 작업을 수행하게 됩니다.

 

EDX(Extended Data Register)

데이터 레지스터입니다. 입, 출력 포인터 값을 저장할 때 사용합니다.

 

ESI(Extended Source Index)

데이터 복사나 조작 시 Source Data의 주소가 저장됩니다. ESI 레지스터가 가리키는 주소의 데이터를 EDI 레지스터가 가리키는 주소의 데이터를 복사하는 용도로 많이 사용됩니다.

 

EDI(Extended Destination Index)

복사 작업 시 Destination의 주소가 저장됩니다. 주로 ESI 레지스터가 가리키는 주소의 데이터가 복사됩니다.

 

ESP(Extended Stack Pointer)

하나의 스택 프레임의 끝 지점 주소가 저장됩니다. PUSH, POP 명령어에 따라서 ESP의값이 4Byte씩 변합니다.

 

EBP(Extended Base Pointer)

하나의 스택 프레임의 시작 지점 주소가 저장됩니다. 현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP의 값은 변하지 않습니다. 현재의 스택 프레임이 소멸되면 이전에 사용되던 스택 프레임을 가리키게 됩니다.

 

 

 


 

명령 포인터 레지스터

EIP(Extended Instruction Pointer)

다음에 실행해야 할 명령어가 존재하는 메모리 주소가 저장됩니다. 현재 명령어를 실행 완료한 후에 EIP 레지스터에 저장되어 있는 주소에 위치한 명령어를 실행하게 됩니다. 실행 전 EIP 레지스터에는 다음 실행해야 할 명령어가 존재하는 주소의 값이 저장됩니다.

 

 


 

Segment Registers

세그멘트 레지스터는 총 6개(CS, SS, DS, ES, FS, GS)이고 각 크기는 16비트입니다. 각 세그먼트 레지스터가 가리키는 세그먼트 디스크립터와 가상메모리가 조합되어 선형주소가 되며, 페이징 기법에 의해서 선형 주소가 최종적으로 물리주소로 변환됩니다. 만약 OS에서 페이징을 사용하지 않는다면 선형 주소는 그대로 물리주소가 됩니다.

CS(Code Segment)

코드 영역의 시작 주소를 저장합니다.

 

DS(Data Segment)

데이터 영역의 시작 주소를 저장합니다.

 

ES(Extra Segment)

비디오 영역의 시작 주소를 저장합니다.

 

FS

기타 영역의 시작 주소를 저장합니다.

 

SS(Stack Segment)

스택 영역의 시작 주소를 저장합니다.

 

 

출처 : https://asiatica-aramid.tistory.com/28

반응형