ipwn

[register] x86 레지스터 본문

Etc

[register] x86 레지스터

ipwn 2018. 1. 8. 10:06
레지스터란 특정한 목적에 사용되는 일시적인 기억 장치를 의미하며, 데이터를 읽고 쓰는 기능이 매우 빠르고, 

중앙 처리 장치(CPU) 내부에 사용된다. IA 32(x86) CPU는 크게 5종류의 레지스터가 있다.

범용 레지스터, 인덱스 레지스터, 포인터 레지스터, 부동 소수점 레지스터, 플래그 레지스터와 같은 레지스터들이 

그 것을 의미하며 각각 사용용도가 모두 다르다. 레지스터들 앞에 붙어있는 E는 Extended의 약자이다.


1. 범용 레지스터


EAX : 곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴값이 저장되는 용도로 사용된다.


EBX : ESI나 EDI와 결합하여 인덱스에 사용된다.


ECX : 반복 명령어 사용시 카운터로 사용돤다.


ECX 레지스터에 반복할 횟수를 지정해놓고 반복 작업을 수행한다.


EDX : EAX와 같이 쓰이며 부호 확장 명령 등에 쓰인다.



2. 인덱스 레지스터


ESI : 데이터 복사나 조작시 소스 데이터의 주소가 저장된다.
 
ESI 레지스터가 가리키는주소의 데이터를 EDI 레지스터가 가리키는 주소로 복사하는 용도로 많이 사용된다.

EDI : 복사 작업시 목적지의 주소가 저장된다. 주로 ESI 레지스터가 가리키는 주소의 데이터가 복사된다.


3. 포인터 레지스터

EIP : 다음에 실행해야 할 명령어가 존재하는 메모리 주소가 저장된다.
 
현재 명령어를 실행 완료한 후에 EIP 레지스터에 저장되어 있는 주소에 위치한 명령어를 실행하게 된다. 

실행 전 EIP 레지스터는 다음 실행해야 할 명령어가 존재하는 주소의 값이 저장된다.

EBP : 하나의 스택 프레임의 시작 지점 주소가 저장되며, 현재 사용되는 스택 프레임이 소멸되지 않는 동안 

EBP의 값은 변하지 않는다. 현재의 스택 프레임이 소멸되면 이전에 사용되던 스택 프래임을 가리키게 된다.

ESP : 하나의 스택 프레임의 끝 지점 주소가 저장된다.

PUSH, POP 명령어에 따라서 ESP의 값이 4byte씩 변한다.


4. 부동 소수점 레지스터

ST(0) ~ ST(7) : 부동 소수점 연산에 사용된다.

5. 플래그 레지스터

OF(Overflow) : 산술 연산 후 상위(가장 왼쪽) 비트의 overflow를 나타낸다.

DF(Direction) : 스트링(문자) 데이터를 이동시키거나 비교할 때 왼쪽 또는 오른쪽의 방향을 결정한다.

IF(Interrupt) : 키보드 입력과 같은 외부 인터럽트가 처리되어야 하는지 또는 무시되어야 하는지를 나타낸다.

TF(Trap) : 단일 단계 모드(single-step mode)의 프로세서 연산을 허용합니다. 디버거 프로그램은 TF 플래그를 설정해서,

사용자가 한 번에 하나씩 명령어를 실행시키고, 레지스터와 메모리 상에서 그 영향을 조사할 수 있게 한다.

SF(Sign) : 산술 연산의 결과 값에 대한 부호를 나타낸다. (0 = 양수, 1 = 음수)

ZF(Zero) : 산술이나 비교 연산의 결과를 나타낸다. (0 = 결과 값이 0이 아님, 1 = 결과 값이 0)

AF(Auxiliary carry) : 특수화된 산술에서 사용되며, 그 산술 연산에서 비트 3에서 비트 4로의 캐리를 포함한다.

PF(Parity) : 연산 경로가 1비트들의 개수를 나타냅니다. 그 개수가 짝수인 경우 짝수 패리티(even parity)라 부르며, 

홀수인 경우 홀수 패리티(odd parity)라 한다.

CF(Carry) : 산술 연산 후 상위 비트의 캐리를 포함합니다. 또한 비트 자리이동(shift) 또는 비트 회전(rotate) 연산 후 가장 

마지막의 비트 내용을 포함한다.


'Etc' 카테고리의 다른 글

[Linux] 자주 쓰이는 명령어 정리  (0) 2018.01.08
Comments