NOTICE

[개념 이해] CPU 레지스터

Date : 2015.01.19 15:10 Category :


 리버싱이나 악성코드 분석을 하기 위해서는 레지스터에 대해 알아아 합니다. OllyDBG.exe로 디버깅하면서 우측 상단에 EAX, EBX... 등으로 되어 있는 것을 한번쯤 보셨을 것입니다. 이것이 바로 OllyDBG.exe에서 보여주는 레지스터 정보입니다. 오늘은 이 레지스터에 대해 알아보도록 하겠습니다.


 레지스터는 CPU내부에 존재하는 다목적 저장 공간입니다. CPU와 한 몸이기 때문에 고속으로 데이터를 처리할 수 있습니다. 레지스터는 범용레지스터, 세그먼트 레지스터, 상태 플래그 레지스터, 명령 포인터 레지스터로 나눌 수 있습니다.




1. 범용 레지스터

 범용적으로 사용되는 레지스터들입니다. 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 의 값은 변하지 않는다. 현재의 스택 프레임이 소멸되면 이전에 사용되던 스택 프레임을 가리키게 된다.




2. 명령 포인터 레지스터


EIP (Extended Instruction Pointer)

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



3. Segment Registers

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


CS(Code Segment)

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


DS(Data Segment)

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


ES(Extra Segment)

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


FS

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


SS(Stack Segment)

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


 이상으로 '[개념 이해] CPU 레지스터'에 대한 포스팅을 마치겠습니다.



  1. no picture 개념 정의가 2016.12.28 11:51

    매우 깔끔하고 군더더기가 없습니다. 특히 약어 설명이 개념 이해에 많은 도움이되었습니다. 감사합니다.