# 해킹 3419 허가온
## 레지스터
### 범용 레지스터
*컴퓨터의 CPU안에 있으며 연산처리, 연산결과, 복귀주소등 작은 데이터를 기억하는 레지스터이다.*
1. EAX
- 산술, 논리연산을 수행하여 함수의 반환값이 저장된다.
2. EBX
- ESI 레지스터나 EDI 레지스터와 결합될수 있으며 메모리주소를 저장한다.
3. ECX
- 반복 명령어 사용시 반복 카운터로 사용되는 값을 저장한다.
4. EDX
- 큰 수의 곱셈과 나눗셈 연산에서 EAX레지스터와 함께 사용되고 부호 확장 명령등에 사용된다.
5. EDI
- 복사시에 목적지의 주소가 저장된다.
6. ESI
- 데이터를 조작하거나 복사시에 소스데이터의 주소가 저장된다.
7. ESP
- 스택프레임에서 스택의 가장 끝지점 주소가 저장 되며 push, pop명령에 따라 esp의 값이 4바이트씩 이동한다.
8. EBP
- 스택프레임에서 스택의 시작 지점 주소가 저장된다. 스택프레임이 소멸되지 않는 한 ebp레지스터의 값은 변하지 않는다.
9. EIP
- 실행중인 현재 주소를 가르킨다. CPU가 바이너리 코드를 실행시킴에 따라 EIP레지스터는 CPU가 현재 어느 코드를 실행시키고 있는지 나타내기 위해 실행되는 코드의 주소를 갱신한다.
### 세그먼트 레지스터
*세그먼트에 대한 주소 지정을 지원한다.*
1. ES
- 추가 레지스터로 주로 문자 데이터의 주소를 지정하는데 사용한다.
2. CS
- 함수나 제어문 같은 명령어들이 저장되는 코드 세그먼트의 세그먼트 셀렉터를 포함하고 있으며 이를 참조하여 EIP를 이용하여 명령어의 주소를 계산한다.
3. SS
- 주소와 데이터를 일시적으로 저장할 목적으로 쓰이는 스택의 주소를 저장하는데 사용된다.
4. DS
- 주로 전역, 정적 변수 데이터가 들어있는 데이터 세그먼트의 위치를 가르키는 레지스터로 CS레지스터와 같은 방법으로 정보를 얻을 수 있다.
5. FS
- 사용처 미정, 여분 레지스터
6. GS
- 사용처 미정, 여분 레지스터
### 플래그 레지스터
*마이크로프로세서에서 다양한 산술 연산 결과를 알려주는 플래그 비트를 저장한다. 조건문 같은 실행순서의 분기를 정할 때 주로 사용된다.*
1. C
- 캐리 플래그, 부호없는 숫자의 연산 결과가 비트 범위를 넘어섰을 때 참
2. P
- 패리티 플래그, 연산 결과에서 1로 된 비트의 수가 짝수일 경우 참
3. A
- 보조 캐리 플래그, 연산 결과 하위 4bit에서 비트 범위를 넘어섰을 때 참
4. Z
- 제로 플래그, 연산 결과가 0일 경우 참
5. S
- 사인 플래그, 연산 결과가 음수일 경우 참
6. T
- 트랩 플래그, 참일 경우 한 명령이 실행 될 때 마다 인터럽트 발생. 디버깅에 사용
7. D
- 디렉션 플래그, 문자열 조작에서 참일 경우 주소 레지스터값이 감소. 거짓일 경우 증가
8. O
- 오프플로우 플래그, 부호 있는 숫자의 연산 결과가 비트범위를 넘어섰을 때 참.