레지스터?
CPU 내부에서 사용되는 고속의 기억 장치.
CPU는 연산을 위해 메모리에 있는 데이터들을 레지스터로 옮깁니다.
연산을 하는 도중에도 연산 결과를 레지스터에 저장합니다.
인텔 x86 CPU 에서는 9개의 범용 레지스터를 제공하고 있습니다.
오늘 포스팅은 그 9개의 범용레지스터의 종류와, 각각의 레지스터가 어떤 임무를 부여받았는지에 대한 포스팅입니다.
레지스터 종류
-
EAX (Extended Accumulator Register)
- 산술 연산 레지스터로, 곱셈과 나눗셈 명령에서 사용하고 함수의 return 값을 저장합니다.
-
EBX (Extended Base Register)
- 산술 연산 레지스터로, ESI나 EDI와 합쳐져 인덱스에 사용됩니다.
-
ECX (Extended Counter Register)
- 산술연산 레지스터로, 반복 명령어(Loop) 를 사용할 때 반복 카운터를 저장하는 역할입니다. 반복 횟수를 저장하고 있습니다.
-
EDX (Extended Data Register)
- 산술 연산 레지스터로, EAX 의 보조 역할입니다. EAX 만으로 연산 결과가 담기지 않을 때 부호 확장 명령 등으로 사용됩니다.
-
ESI (Extended Source Index)
- 인덱스 레지스터로, 데이터를 복사 / 비교할 때 소스의 데이터 주소가 저장됩니다.
-
EDI (Extended Destination Index)
- 인덱스 레지스터로, 데이터를 복사 / 비교할 때 목적지의 주소가 저장됩니다.
-
EBP (Extended Base Pointer)
- 포인터 레지스터로, 스택 프레임의 시작 주소가 저장됩니다. 현재 스택프레임이 이용되는 동안은 값이 변하지 않지만, 현재의 스택프레임이 사라지면 이전의 스택 프레임을 가리킵니다.
-
ESP (Extended Stack Pointer)
- 포인터 레지스터로, 스택 프레임의 가장 최근 주소를 저장합니다. PUSH 나 POP 등의 명령어로 값이 변합니다.
-
EIP (Extended Instruction Pointer)
- 포인터 레지스터로, 다음 명령어가 저장된 메모리의 주소를 저장합니다.
EAX | 사칙연산 중 곱셈과 나눗셈에 사용되며, 함수의 반환값을 저장 |
EBX | ESI 또는 EDI 와 결합하여 인덱스에 사용되며, 산수와 변수를 저장 |
ECX | 반복 카운터를 저장. ECX에 반복할 횟수를 지정하여 반복레지스터가 반복 수행. |
EDX | EAX 보조, 부호 확장 명령 등에 사용 |
ESI | 출발지 주소 저장 |
EDI | 목적지 주소 저장. 주로 ESI 레지스터가 가리키는 주소 데이터 복사됨. |
EBP | 스택 프레임의 시작주소 저장(스택포인터의 기준점 저장) |
ESP | 스택 프레임의 끝 지점 주소 저장 |
EIP | 다음 실행할 명령어주소 저장 |
32비트의 크기를 가진 레지스터는 하위 16비트를 다른 이름으로 사용할 수 있습니다.
산술연산 레지스터같은 경우, 하위 16비트를 다시 쪼개서
상위 8비트, 하위 8비트를 다른 이름으로 사용할 수 있습니다.
다음 포스팅은 스택 관련 포스팅으로 오겠습니다.
'Archive > Hacking' 카테고리의 다른 글
[ Linux 명령어 ] Linux command & Multi - command | 리눅스 파이프와 세미콜론 차이 (0) | 2020.07.13 |
---|---|
[ Stack ] Stack & Stack Frame | 스택이란 무엇일까? (0) | 2020.04.19 |
[ Pwnable ] pwnable.kr 1번 fd 풀이 (2) | 2020.04.15 |
[ Assemble ] 어셈블리 곱셈(mul)/ 나눗셈(div) 연산 실습(1byte) (0) | 2020.04.15 |
[ Assemble ] 어셈블리어 덧셈(add)/뺄셈(sub) 실습 (1) | 2020.04.15 |