728x90
반응형
컴퓨터 구조 (Computer Architecture)
컴퓨터가 효율적으로 작동할 수 있도록 하드웨어 및 소프트웨어의 기능을 고안하고, 이들을 구성하는 방법
컴퓨터의 기능 구조에 대한 설계
- 폰 노이만 구조
- 중앙처리장치 CPU
- 기억장치 (주/보조)
- 버스
- 데이터 버스(Data Bus)
- 주소 버스(Address Bus)
- 제어 버스(Control Bus)
- 랜선, 데이터 전송 목적 소프트웨어, 프로토콜 등
- 컴퓨터 부품 사이 신호를 전송하는 통로
-
- 하버드 구조
- 수정된 하버드 구조
명령어 집합구조 ( ISA : Instruction Set Architecture)
CPU가 해석하는 명령어의 집합
- ARM
- MIPS
- AVR
- 인텔의 x86 및 x86-64
- n비트 아키텍처 : n비트는 cpu가 처리할 수 있는 데이터의 크기 = WORD
레지스터
11. 범용 레지스터(General Purpose Register)
- 운영 모드와 관계가 깊은 레지스터
- 계산(연산 처리), 메모리 주소(번지) 지정, 작은 데이터의 임시 저장 공간, 컴퓨터 장치 제어 등의 목적으로 사용
- 32bit 프로세서, 64bit 프로세서 전부 보유
- 범용 레지스터의 수는 프로세서가 지원하는 운영 모드에 따라 달라짐.
- 범용 레지스터의 수가 많을 경우, 수행 속도가 빨라짐.
- 함수를 호출할 때 파라미터를 통해 값을 넘겨주는데 다수의 범용 레지스터에 어떤 함수에서 사용할 정보가 담긴 함수 파라미터를 넣어 넘겨주면 스택 영역의 메모리에 접근하는 시간과 스택을 정리하는 시간을 줄일 수 있어서 수행 속도가 빨라진다.
- 기본적인 8개의 레지스터는 공통적인 용도로 사용할 수 있게 가지고 있고, IA-32e(64bit) 모드에서는 추가적으로 R8 ~ R15 레지스터가 있다.
- IA-32e(64bit) 모드에서 기본 범용 레지스터와 R8 ~ R15 레지스터는 같은 기능을 하지만, R8 ~ R15 레지스터는 특수한 용도가 정의되지 않는다.
📎 다양한 용도로 사용될 수 있지만, 특정 명령어는 해당 명령어의 용도에 맞는 레지스터를 사용하여야 한다.
- 범용 레지스터 종류
- 기본 레지스터레지스터 이름용도
AX - 입출력 / 산술 연산 수행 주 누산기(Primary Accumulator Register) - 함수 리턴값을 가짐 BX - 데이터의 주소를 지정할 때 데이터 포인터로 사용(주로 DS 세그먼트에 대한 포인터 저장), 베이스 레지스터(Base Register) - 일반적인 용도는 계산기, 특정 주소 지정(인덱스)을 위해 DI, SI와 결합 가능 CX - 문자열이나 루프의 카운터(Counter Register) - 루프가 반복되는 횟수를 제어하는 값 또는 왼쪽이나 오른쪽으로 이동되는 비트 수 포함 가능 DX - 데이터 레지스터(Data Register) - I/O(Input/Output) 주소를 지정할 때 사용(입출력 연산) - 큰 수 산술 연산을 수행할 때 보조 레지스터로 사용(with. AX) - 인덱스 레지스터
인덱스 주소지정, 연산(덧셈, 뺄셈)에서 사용 가능레지스터 이름용도SI 문자열에 관련된 작업을 수행할 때 원본 문자열의 인덱스(위치)로 사용 DI 문자열에 관련된 작업을 수행할 때 목적지 문자열의 인덱스(위치)로 사용 - 포인터 레지스터(Pointer Register)레지스터 이름용도
SP - 스택(Stack)의 포인터로 사용 - 현재 스택의 위치 - 스택 사이즈가 커지면 SP에 저장된 주소값은 작아진다. BP - 스택의 데이터에 접근할 때 데이터의 포인터로 사용 - 현재 스택 프레임이 소멸되지 않는 동안 EBP의 값이 변하지 않으므로 기준점(Base)이 됨 IP - 명령어(Instruction) 포인터 레지스터 - 현재 실행중인 코드 세그먼트에 속한 현재 명령어를 가리킨다는 점에서 CS 레지스터 (CS:IP)와 연관됨. - 기타 레지스터레지스터 이름용도
R8 ~ R15 x86-64 프로세서에서 추가된 범용 레지스터, 특수한 용도가 정의되어 있지 않아 다양한 용도로 사용 가능
- 기본 레지스터레지스터 이름용도
2. 세그먼트 레지스터(Segment Register)
세그먼트 : 프로토콜 데이터 단위
- 16bit 크기를 가진 레지스터
- 어드레스 영역을 다양한 크기로 구분하는 역할
- 주된 작업은 어드레스 영역의 구분(세그먼트라고 하는 메모리의 한 영역에 대한 주소지정)이지만, 모드에 따라 조금씩 차이가 있다.
- 리얼 모드
단순 고정된 크기의 어드레스 영역을 지정하는 역할 - 보호 모드와 IA-32e 모드
접근 권한, 세그먼트의 시작 주소와 크기 등을 지정하는 데 사용
- 리얼 모드
📎 **응용프로그램으로부터 커널 영역을 보호하는 기능을 구현 가능**
- 과거 IA-32, IA-16에서는 사용 가능 물리 메모리를 키우려고 했지만 현대에선 사용 가능 주소 영역이 넓어져서 코드 영역과 데이터, 스택 메모리 영역을 가리킬 때 사용되고, 나머지 레지스터는 운영체제 별로 용도를 결정할 수 있도록 범용적인 용도로 제작
- 세그먼트 레지스터의 종류
레지스터 이름용도
CS | - 코드 영역(프로그램의 코드 세그먼트 시작주소 포함)을 가리키는 레지스터 - 데이터 이동 명령으로 값 변경 X, 점프 명령이나 인터럽트 관련 명령으로 변경 가능 - 이 세그먼트 주소에 IP 레지스터 오프셋 값을 더하면, 실행하기 위해 메모리로부터 가져와야 할 명령어의 주소가 됨 - 일반적 프로그래밍에선 직접 참조 필요 X |
DS | - 데이터 영역(프로그램의 데이터 세그먼트 시작주소 포함)을 가리키는 레지스터 - 데이터 이동 명령으로 값 변경 가능, 데이터 영역에 접근할 때 임시적으로 사용 |
ES | - 데이터 영역을 가리키는 레지스터 - 데이터 이동 명령으로 값 변경 가능, 문자열과 관련된 작업(메모리 주소 지정을 다루는 스트링 연산)을 처리할 때 임시적으로 사용 * 이 때 DI레지스터와 연관되어 적절한 세그먼트 주소로 초기화 해야함 |
FS/GS | - 데이터 영역을 가리키는 레지스터 - 기억장소 요구사항을 다루기 위해서 80386에서 추가로 도입된 여분의 세그먼트 레지스터 |
SS | - 스택 영역(프로그램의 스택 세그먼트 시작 주소)을 가리키는 레지스터 - 주소와 데이터의 임시 저장 목적 - 데이터 이동 명령으로 값을 변경 불가능, 스택 관련 레지스터(SP, BP)를 통해 스택에 접근할 때 임시적으로 사용 |
3. 플래그 레지스터
- 프로세서의 현재 상태를 저장하고 있는 레지스터
- 비트들로 CPU의 현재 상태 표현
CF(Carry Flag)부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정.
ZF(Zero Flag) | 연산의 결과가 0일 경우 설정. |
SF(Sign Flag) | 연산의 결과가 음수일 경우 설정. |
OF(Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정. |
4. 컨트롤 레지스터
- 운영 모드를 바꾸고, 현재 운영 모드의 특정 기능을 제어하는 레지스터
- x86 프로세서에서는 CR0 ~ CR4의 총 5가지 컨트롤 레지스터 보유
- x86-64 프로세서에서는 위의 5개 및 추가로 CR8이 생겨 6개를 보유
레지스터 이름용도
CR0 | - 운영 모드 제어 기능 레지스터 - 리얼 모드에서 보호 모드로 전환하는 역할, 캐시, 페이징 기능 등 활성화 |
CR1 | - 프로세서에 의해 예약된 레지스터 |
CR2 | - 페이지 폴트 발생 시 페이지 폴트가 발생한 선형 주소(가상 주소)가 저장되는 레지스터 - 페이징 기법을 활성화 한 후, 페이지 폴트 발생 시만 유효한 값을 가짐 |
CR3 | - 페이지 디렉터리의 물리 주소와 페이지 캐시에 관련된 기능을 설정하는 레지스터 |
CR4 | - 프로세서에서 지원하는 각종 확장 기능을 제어하는 레지스터 - 페이지 크기 확장이나 메모리 영역 확장 등의 기능 활성화 |
CR8 | - 테스크 우선순위 레지스터의 값을 제어하는 레지스터 - 프로세스 외부 발생 인터럽트 필터링 - IA-32e 모드에서만 접근 가능 |
마이크로 아키텍처
- 캐시 설계
- 파이프라이닝
- 슈퍼 스칼라
- 분기 예측
- 비순차적 명령어 처리
반응형
'Reversing > 기초 리버싱' 카테고리의 다른 글
1장 Introduction: Reverse Engineering (0) | 2023.07.17 |
---|---|
2장 : Background: Static Analysis vs. Dynamic Analysis (0) | 2023.07.17 |
4장 : Background: Windows Memory Layout (0) | 2023.07.17 |
5장 : x86 Assembly : Essential Part (0) | 2023.07.17 |