- 연산장치( ALU : Arithmetic and Logic Unit )

연산장치는 CPU의 핵심 부분 중 하나로, 산술과 논리 연산을 수행하는 연산 회로 집합으로 구성된다.


   구성요소

 기능

 내부

 장치

 가산기

 덧셈 연산 수행

 보수기

 뺄셈 연산 수행, 1의 보수나 2의 보수 방식 이용

 시프터

 비트를 오른쪽이나 왼쪽으로 이동하여 나눗셈과 곱셈 연산 수행

 관련

 레지

 스터

 누산기

 연산의 중간 결과 저장

 데이터 레지스터

 연산에 사용할 데이터 저장

 상태 레지스터

 연산 실행결과로 나타나는 양수와 음수, 자리올림, 오버플로우의 상태 기억


- 제어장치( Control Unit )

제어장치는 입력, 출력, 기억, 연산 장치를 제어하고 감시하며, 주기억 장치에 저장된 명령을 차례로 해독하여 연산 장치로 보내 처리되도록 지시한다.


  구성요소

 기능

 내부

 장치

 명령 해독기

 명령 레지스터에 있는 명령을 해독하여 부호기로 전송

 부호기

 명령 해독기가 전송한 명령을 신호로 만들어 각 장치로 전송

 주소 해독기

 명령 레지스터에 있는 주소를 해독하여 메모리의 실제 주소로 변환한 후, 

 이를 데이터 레지스터에 저장

 관련

 레지

 스터

 프로그램 카운터

 다음에 실행할 명령의 주소 저장

 명령 레지스터

 현재 실행 중인 명령 저장

 메모리 주소 레지스터

 주기억 장치의 번지 저장

 메모리 버퍼 레지스터

 메모리 주소 레지스터에 저장된 주소의 실제 내용 저장


- 레지스터

레지스터는 처리 중인 데이터나 처리 결과를 임시 보관하는 CPU 내의 기억 장치로, 대개 연산 장치나 제어 장치에 함께 포함되어 있다.



- 레지스터 종류

1. 범용 레지스터

범용 레지스터는 연산 장치가 수행한 계산 결과의 임시 저장, 산술 및 논리 연산, 주소 색인 등의 여러 목적으로 사용될 수 있는 레지스터이며, EAX, EBX, ECX, EDX 등이 있다.


> EAX

입출력과 대부분 산술 연산에 사용된다.

다른 레지스터보다 EAX를 사용하면 더 효율적인 기계코드를 생성하는 명령어도 있다.


> EBX

DS 세그먼트에 대한 포인터를 주로 저장하며, ESI나 EDI와 결합하여 인덱스에 사용된다.

메모리의 주소 지정을 확장하기 위해 인덱스로 사용될 수 있는 유일한 범용 레지스터다.


> ECX

루프가 반복되는 횟수를 제어하는 값, 왼쪽이나 오른쪽으로 이동되는 비트 수 등을 포함할 수 있다.


> EDX

입출력 연산에 사용하며 큰 수의 곱셈과 나눗셈 연산에서 EAX와 함께 사용된다.



2. 세그먼트 레지스터

세그먼트는 프로그램에 정의된 메모리상의 특정 영역으로, 코드, 데이터, 스택 등을 포함하며, 메모리의 대부분에 위치할 수 있다.


> CS( Code Segment )

코드 세그먼트는 실행될 기계 명령을 포함한다.

코드 세그먼트의 시작 주소를 가리키며, 일반 프로그래밍에서는 이 레지스터를 직접 참조할 필요가 없다.


> DS( Data Segment )

프로그램에 정의된 데이터, 상수, 작업 영역을 포함한다.

데이터 세그먼트의 시작 주소를 가리키는데, 프로그램은 참조하려는 데이터의 오프셋을 DS 레지스터에 저장된 주소 값에 더해 데이터 세그먼트 내에 위치해 있는 데이터의 주소를 참조한다.


> SS( Stack Segment )

프로그램이 실행될 때, 실행 과정에서 필요한 데이터나 연산 결과 등을 임시로 저장하거나 삭제할 때 사용된다.


> ES, FS, GS

메모리 주소 지정을 다루는 스트링 연산에 사용되고, EDI 레지스터와 함께 사용된다.



3. 포인터 레지스터

포인터 레지스터는 프로그램 실행 과정에서 사용되는 주요 메모리 주소값을 저장한다.


> EBP

스택 세그먼트에서 현재 호출되어 사용되는 함수의 시작 주소 값을 저장한다.

함수로 전달되는 지역변수 등을 참조할 때 기준이 되며, ESP 레지스터와 함께 사용되어 스택 프레임을 형성한다.


> ESP

현재 스택 영역에서 가장 하위 주소를 저장한다.

스택은 상위 주소에서 하위 주소로 이동하며 데이터를 저장하므로 스택이 확장되면 스택 포인터도 상위 주소에서 하위주소로 값이 변경된다.


> EIP

다음에 실행될 명령의 오프셋을 포함한다.

현재 실행 중인 코드 세그먼트에 속한 현재 명령을 가리킨다.



4. 인덱스 레지스터

인덱스 레지스터는 데이터를 복사할 때 출발지와 목적지 주소를 각각 가리키는 레지스터로 사용된다.


> ESI & EDI

주로 메모리의 한 영역에서 다른 영역으로 데이터를 연속적으로 복사할 때 사용된다.


5. 플래그 레지스터

크기가 32비트로, 컴퓨터의 다양한 상태를 나타내는 비트를 포함한다.


> 상태 플래그

상태플래그는 산술 명령 결과를 반영한다.

- CF : 산술 연산 결과로 자리올림이나 자리내림이 발생할 때 세트된다.

- ZF : 산술 연산 결과가 0이면 세트된다.

- OF : 부호가 있는 수의 오버플로우가 발생하거나 MSB가 변경되었을 때 세트된다.

- PF : 산술 연산 결과가 짝수면 세트된다.

- AF : 8비트 피연산자를 사용한 산술 연산에서 비트 3에서 비트 4로 자리올림이 발생하면 세트된다.

- SF : 산술 및 논리 연산의 결과로 음수가 생기면 세트된다.


> 제어 플래그

DF는 스트링 명령을 제어한다. 

DF가 1이면 스트링 명령은 자동 감소된다. 

DF가 0이면 스트링 명령은 자동 증가된다.


> 시스템 플래그

시스템 플래그는 운영체제나 장치 드라이버를 제어한다.

'NCS보안3기 > 시스템 해킹' 카테고리의 다른 글

[System Hacking] Stack Buffer Overflow  (0) 2017.05.16
[System Hacking] 메모리  (0) 2017.05.16
[System Hacking] 운영체제  (0) 2017.05.15
Posted by Imp3rio