- 연산장치( 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 |