F.R.I.D.A.Y.

CPU 레지스터 본문

리버싱

CPU 레지스터

F.R.I.D.A.Y. 2018. 9. 17. 11:49
반응형

 CPU는 연산속도가 굉장히 빠르다. 하드디스크보다 SSD가, SSD보다 메모리(RAM, 램)가 빠르다는 것은 일반적으로 알고 있다. 그러나 CPU는 메모리 속도를 훨~씬 뛰어넘는다[각주:1].


 CPU는 연산을 위해 자체 메모리를 가지고 있는데 이 메모리는 용량은 미칠듯이 작으면서 가격은 미칠듯이 높아서 차선책으로 현재의 램[각주:2]이 사용되는 것이다.


 레지스터는 다음으로 나눌 수 있다.

>> 범용 레지스터

>> 세그먼트 레지스터

>> 플래그 레지스터

>> 명령 포인터 레지스터


 레지스터는 X[각주:3]L, X[각주:4]H 등으로 분할해서 접근이 가능하다. XL과 XH를 모두 접근하고자 하면 X[각주:5]X라고 하면 된다.

범용 레지스터

EAX

 주 누산기. 산술 연산에 사용, 기본적으로 산술된 값을 저장한다.

EBX

 DS 세그먼트의 포인터를 주로 저장한다. ESI나 EDI와 결합해 인덱스에 사용된다. 인덱스로 사용할 수 있는 유일한 범용 레지스터

ECX

 반복 명령을 위한 카운터로 사용한다. ECX에 횟수를 지정해 반복 작업을 수행한다.

EDX

 데이터 레지스터. 입출력 연산에서 사용하며, 큰 수의 곱셈과 나눗셈 연산은 DX와 AX의 사용을 가정한다. 

세그먼트 레지스터

CS

 코드 세그먼트. 프로그램이 작동하는 어셈블리 코드의 시작 주소를 포함한다. CS값에 EIP 레지스터의 오프셋값을 더하면 실행하기 위한 명령어의 주소가 된다. 일반적으로 직접 참조할 필요가 없다고 한다.

DS

 데이터 세그먼트의 시작 주소를 포함한다. 명령어로 데이터의 위치를 알아낸다. 이 주소에 명령어의 오프셋 값을 더하면 데이터 세그먼트에 속한 특정 바이트에 대한 참조가 생성된다.

SS

 스택 세그먼트. 메모리상에 스택의 구현을 가능하게 한다. 주소와 데이터의 임시 저장 목적으로 스택을 사용한다. 시스템은 프로그램의 스택 세그먼트의 시작 주소를 SS 레지스터에 저장한다.

ES

 메모리 주소 지정을 다루는 문자 데이터 연산에서 사용한다. 이 경우 ES 레지스터는 DI(인덱스) 레지스터와 연관된다. 사용 전 적절한 세그먼트 주소로 초기화가 필요하다.

FS, GS

 기타 영역의 시작 주소를 저장한다. 80386에서 추가로 도입된 여분의 세그먼트 레지스터.

플래그 레지스터

OF (OVERFLOW)

 산술 연산후 상위(가장 왼쪽, MSB) 비트의 오버플로를 나타낸다.

DF (DIRECTION)

 문자 데이터를 이동하거나 비교할 때 왼쪽, 오른쪽 방향을 결정한다.

IF (INTERRUPT)

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

TF (TRAP)

 단일 단계 모드의 프로세서 연산을 허용한다. 디버거와 같은 프로그램은 TF플래그를 설정해 한번에 하나씩 명령어를 실행시키고, 레지스터와 메모리 상에서 해당 영향을 조사한다.

SF (SIGN)

 산술 연산의 결과에 대한 부호를 포함한다. (0 = 양, 1 = 음)

ZF (ZERO)

 산술, 비교 연산의 결과를 나나탠다. (0 = 결과 값이 1이 아님, 1 = 결과 값이 0)

AF (AUXILIARY CARRY)

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

PF (PARITY)

 연산 결과 1비트들의 개수를 나타낸다. 개수가 짝수인 경우 짝수 패리티, 홀수의 경우 홀수 패리티라고 한다.

CF (CARRY)

 산술 연산 후 가장 상위(가장 왼쪽, MSB)비트의 캐리를 포함한다. 비트 자리이동 또는 비트 회전연산 후 가장 마지막의 비트 내용을 포함한다.

명령 포인터 레지스터

EIP (Instruction)

 다음 실행 명령어의 주소를 가리킨다. CS와 함께 사용.

ESP (Stack)

 스택 프레임의 스택 포인터의 주소를 가리킨다.

EBP (Base)

 스택 프레임의 베이스 포인터의 주소를 가리킨다.


인덱스 레지스터

ESI (Source Index)

 문자 조작 연산에서 필요하다. DS 레지스터와 연관된다.

EDI (Destination Index)

 문자열 연산에서 필요하다. ES레지스터와 연관된다.


 참고 링크

>> http://securityfactory.tistory.com/182

>> http://karfn84.tistory.com/entry/%EC%96%B4%EC%85%88%EB%B8%94%EB%A6%AC-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0%EC%9D%98-%EA%B8%B0%EB%8A%A5


  1. 메모리가 2-3천 MHz인데 반해 CPU는 요새 나오는 중저가 CPU만 봐도 클럭이 2-3GHz를 넘긴다 [본문으로]
  2. 비교적 싸면서 용량면에서는 레지스터의 최소 수 천배가 넘는다. [본문으로]
  3. EAX, EBX 등 가운데 들어있는 녀석들이 해당한다. [본문으로]
  4. 이전 각주와 동일 [본문으로]
  5. 이전 각주와 동일 [본문으로]
728x90
반응형

'리버싱' 카테고리의 다른 글

test.exe 해결 과정 1  (0) 2018.10.01
test VS cmp  (0) 2018.10.01
리버싱 관련 용어정리  (1) 2018.09.30
Comments