CPU의 주요 레지스터(register) 종류와 역할
CPU의 주요 레지스터(register) 종류와 역할
레지스터(register)란 CPU안에 있는 메모리(저장 공간)를 말한다. 흔히들 ‘HDD’, ‘SDD’ 라고 부르는 물건들, ‘RAM’ 이라는 물건과 레지스터의 차이는 이렇게 비유 해 볼 수 있을것같다.
당신이 물건을 샀다고 하자. 당신이 ‘물건을 샀다’ 라고 생각하는것은 레지스터이며, 당신이 받은 영수증은 RAM이다. 당신이 이걸 가계부 같은곳에 잘 저장해둔다면, 여기서 가계부는 ‘HDD’, 혹은 ‘SDD’ 정도에 비유 해 볼 수 있겠다.
속도적인 측면, 용량적인 측면, 휘발성의 측면에서 보자.
- 당신의 머리로 기억해내는것(레지스터)이 속도는 가장 빠르겠지만, 대부분의 경우에서 용량과 휘발성(까먹는것)은 가장 높을것이다.
- 영수증(RAM)은 머리로 기억해내는것보다 속도는 느리겠지만, 용량과 휘발성은 머리에 담는것보다 주머니에 담는 내용이 더 많을테니 머리를 사용하는것보다는 더 낫다.
- 가계부(HDD, SDD)는 위의 두가지보다 당연히 느릴수 밖에 없지만, 많은 내용을 담을 수 있고, 가계부를 잃어버리지 않는 이상 내용은 보존된다.
RAM이 우리가 흔히 말하는 컴퓨터 구조에서의 주기억 장치이고, 'HDD', 'SSD'가 보조기억장치이다.
이 정도의 비유면 이해 할 수 있겠는가?
주로 버퍼오버플로우를 일으키거나 리버싱을 위한 선 작업으로 레지스터를 공부한다면, 범용 레지스터들과 명령 포인터 레지스터 정도는 알아두어야 공격을 함에 있어서 이해할 수 있다. 레지스터의 영여 이름을 이해 한다면, 보다 쉽게 이해 할 수 있을것이다.
범용 레지스터
- EAX (Extended Accumulator Register)
- 산술 연산에서 상수 / 변수의 값을 저장하거나 함수의 리턴값을 저장하는 용도로 사용한다.
- EBX (Extended Base Register)
- 메모리 주소를 저장하는 용도로 사용한다.
- ECX (Extended Counter Register)
- 반복 명령을 실행할때 반복 할 횟수를 저장하는 용도로 사용한다.
- EDX (Extended Data Register)
- 부호 확장 명령, 큰 수의 곱셈 또는 나눗셈 연산을 진행 할 때 EAX와 같이 사용된다. 큰 상수 / 큰 변수의 값을 저장하는 용도로 사용한다.
각각 E+ A, B, C, D + X 의 형태이니 기억하는데 어려움은 없을것이다.
색인 레지스터
- ESI (Extended Source Index)
- 복사 작업을 할때에 원본 데이터의 주소가 저장된다.
- EDI (Extended Destination Index)
- 복사 작업을 할때에 목적지의 주소가 저장된다.
포인트 레지스터
- ESP (Extended Stack Pointer)
- 우리가 전시간에 배웠던 스택 포인터(TOP)이다. 스택의 맨 윗 주소를 가르킨다.
- EBP (Extended Base Pointer)
- 스택의 Bottom이다. 스택의 맨 밑 주소를 가르킨다.
포인트 레지스터 - 명령 레지스터
: EIP는 적절한 분류를 찾기 어려워 따로 분류한다.
- EIP (Extended Instruction Pointer)
- 다음 실행할 명령어, 혹은 다음 실행할 명령어의 주소를 담고 있는 레지스터이다. 하나 알아 두어야할것은, 대부분의 버퍼오버플로우 공격은 이 EIP의 내용을 덮어씌우는것(변조)으로 실행된다.
Comments
Post a Comment