IT/embedded

어셈블리 레지스터

lowsec 2016. 1. 26. 21:36

리버스 엔지니어링의 기초(register)

Arin_ | 2011/07/28 13:39 | Assembly 앱으로 보기

툴은 Ollydebugger를 사용한다.(www.ollydbg.de)

 

기본적으로 어셈블리 언어를 알고 시작하는 편이 편하다.

 

먼저 ollydebugger에 나타나는 레지스터 정보를 살펴보자

 

범용레지스터

EAX

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

EBX

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

ECX

반복 명령어 사용시 반복 카운터로 사용된다. ECX 레지스터에 반복할 횟수를 지정해 놓고 반복 작업을 수행하게 된다.

EDX

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

ESI

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

EDI

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

ESP

스택 프레임의 끝지점 주소가 저장

PUSH, POP에 따라서 4byte씩 변함

EBP

스택 프레이의 시작지점 주소가 저장

현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP값은 변하지 않는다

소멸시 이전 사용 스택 프레임을 가르킨다

 ※ EAX,EBX,ECX 등은 32bit, 16bit, 8bit로 사용할 수 있는데, EAX를 16bit로 사용하면 AX, 8bit은AH,AL로 사용 가능하다.

     상위 8bit은 H(high)가 붙고 하위 8bit은 L(low)가 붙는 것이다.

 ※ ESI,EDI,EBP,ESP는 32bit, 16bit로 사용 가능하다.(사용방법 위와 동일)

 

명령포인터

EIP

다음에 실행해야 할 명령어가 존재하는 메모리 주소가 저장된다

 

세그먼트 레지스터

CS

실행가능한 명령어가 존재하는 세그먼트의 오프셋이 저장된다

DS

프로그램에서 사용되는 데이터가 존재하는 세그먼트의 오프셋이 저장된다

SS

스택이 존재하는 세그먼트의 오프셋이 저장된다

 

플래그 레지스터

CF(Carry)

carry flag, 부호없는 연산 결과가 용량보다 클 때 1된다

ZF(Zero)

연산결과가 0일 때 1로 세트된다

OF(overflow flag)

부호 있는 연산 결과가 용량보다 클 때 1된다

SF(Sign)

연산 결과가 음수가 되었을 때 1된다. 연산결과가 양수되면 0된다

DF(Direction)

문자열 처리에서 연속되는 문자열의 처리방향에 따라 세트된다.