시작하기 앞서 본 내용은 시스템 해킹과 보안 (정보보안 개론과 실습)책을 기반으로 공부하며 적는 글이란것을 알린다.
80x86 시스템 CPU의 구조는 연산장치, 제어장치, 레지스터, BUS 인터페이스로 나눠져있다.
첫번째로 연산장치, 이는 CPU 핵심 부분 중 하나로, 산술과 논리등의 연산을 한다.
연산장치의 구성 요소
1. 내부장치
1.1 가산기: 덧셈 연산 수행
1.2 보수기: 뺄셈 연산 수행, 1의 보수나 2의 보수 방식 이용
1.3 시프터: 비트를 오른쪽이나 왼쪽으로 이동하여 나눗셈과 곱셈 연산을 수행]
2. 관련 레지스터
2.1 누산기: 연산의 중간 결과 저장
2.2 데이터 레지스터: 연산에 사용할 데이터 저장
3.3 상태 레즈스터: 연산 실행 결과로 나타나는 양수와 음수, 자리올림, 오버플로 상태 기억
두번째로 제어장치, 이는 입출력, 기억장치, 연산 장치를 제어하고 감시하며, 주기억 장치에 저장된 명령을 차례로 해독하여 연산 장치로 보내 처리하도록 지시한다.
제어장치의 구성 요소
1. 내부장치
1.1 명령 해독기: 명령 레지스터에 있는 명령을 해독하여 부호기로 전송
1.2 부호기: 명령 해독기가 전송한 명령을 신호로 만들어 각 장치로 전송
1.3 주소 해독기: 명령 레지스터에 있는 주소를 해독하여 메모리의 실제 주소로 변환한 후, 이를 데이터 레지스터에 저장
2. 관련 레지스터
2.1 프로그램 카운터: 다음에 실행할 명령의 주소를 저장
2.2 명령 레지스터: 현재 실행중인 명령을 저장
2.3 메모리 주소 레지스터: 주기억 장치의 번지를 저장
2.4 메모리 버퍼 레지스터: 메모리 주소 레지스터에 저장된 주소의 실제 내용을 저장
세번째로 레지스터, 이는 처리 중인 데이터나 처리 결과를 임시 보관하는 CPU 안의 기억 장치로, 대개 연산 장치나 제어 장치에 함께 포함되어 있음. -> 매우 중요하게 활용됨
1. 레지스터의 종류와 기능
레지스터는 메모장과 같은 역할을 한다.
80386이상의 시스템 은 레지스터가 기본 32bit(4byte = 8*(4))이다. 이는 16bit = 2byte, 8bit = 1byte 로 나누어 사용할수 있다(차례로 EAX, AX, (AH, AL))
레지스터의 종류와 용도를 구분하면 범용레지스터, 세그먼트 레지스터, 포인터 레지스터, 인덱스 레지스터, 플래그 레지스터 로 나눌수 있다.
차례대로 알아보도록하겠다.
1. 범용 레지스터
EAX: 누산기 (32bit)// 주로 산술 연산에 사용됨(함수의 결과 값 저장(==메모))
EBX: 베이스 레지스터 (32bit)// 특정 주소를 저장함(주소 지정을 확대하는 인덱스로 사용되기도 함)
ECX: 카운트 레지스터 (32bit)// 반복적으로 실행되는 특정 명령에 사용(루프 반복의 총 횟수or좌우 방향 시프트 비트 수 메모)
EDX: 데이터 레지스터 (32bit)// 일반 자료를 저장(입출력 동작에서 사용됨)
2. 세그먼트 레지스터
CS: 코드 세그먼트 레지스터 (16bit)// 실행한 기계 명령어가 저장된 메모리 주소를 지정
DS: 데이터 세그먼트 레지스터 (16bit)// 프로그램에서 정의된 데이터, 상수 ,작업 영역 메모리 주소를 지정
SS: 스택 세그먼트 레지스터 (16bit)// 프로그램 스택 세그먼트의 시작 주소를 저장한다. 메모리상에 스택 구현을 가능하게 함
ES, FS, GS: 엑스트라 세그먼트 레지스터 (16bit)// 문자 연산과 추가 메모리를 지정하는데 사용하는 여분의 레지스터
3. 포인터 레지스터
EBP: 베이스 포인터 (32bit)// SS레지스터와 함께 사용하여 스택 안의 변수 값을 읽는데 씀
ESP: 스택 포인터 (32bit)// SS레지스터와 함께 사용하며, 스택의 가장 끝 주소를 가리킴
EIP: 명령 포인터 (32bit)// 다음 명령어 오프셋(Offset: 상대 위치 주소)을 저장하며, CS레지스터와 합쳐 다음에 수행할 명령 주소를 형성
4. 인덱스 레지스터
EDI: 목적지 인덱스 (32bit)// 목적지 주소 값을 저장
ESI: 출발지 인덱스 (32bit)// 출발지 주소 값을 저장
5. 플래그 레지스터
EFLAGS: 플래그 레지스터 (32bit)// 연산 결과 및 시스템 상태와 관련된 여러 가지 프래그 값을 저장
위 레지스터들을 연산 장치와 제어 장치에 맵핑 (대응)시키면
1. 연산 장치 관련 레지스터
누산기 = EAX
데이터 레지스터 = EDX
상태 레지스터 = EFLAGS
2. 제어 장치 관련 레지스터
프로그램 카운터 = ECX
명령 레지스터 = EIP
메모리 주소 레지스터 = EBX, EBP, ESP, EDI, ESI...etc..
메모리 버퍼 레지스터 = 기억 장치를 출입하는 데이터가 잠시 저장되는 레지스터
다음 장엔 레지스터의 세부적 내용을 써보도록 하겠다.
(그럼 222222만)
'Reversing' 카테고리의 다른 글
리버스 엔지니어링 - 객체의 동적할당과 해제 -- (0) | 2021.04.03 |
---|