CPU는 메모리로부터 명령어를 가져와 어떤 명령어인지 해석하고 실행하는 동작을 한다.
메모리로부터 명령어를 가져왔을때 CPU내부에 레지스터라는 작은 고속의 메모리가 존재한다.
레지스터의 종료로는 범용 레지스터, 세그먼트 레지스터, 상태 플러그 레지스터, 명령 포인터 레지스터등이 있다.
범용레지스터
EAX
곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴값이 저장되는 용도로 사용
EBX
ESI나 EDI와 결합하여 인덱스에 사용된다
ECX
반복 명령어 사용시 반복 카운터로 사용된다.
반복할 횟수를 지정해 놓고 반복작업을 수행하게 된다.
EDX
EAX와 같이 씌며 부호확장 명령등에 쓰인다.
ESI
데이터 복사나 조작시 Source Data 의 주소가 저장된다.
ESI 레지스터가 가리키는 주소의 데이터를 EDI 레지스터가 가리키는 주소로 복사하는 용도로 많이 사용된다.
EDI
복사 작업시 Destination의 주소가 저장된다. 주로 ESI 레지스터가 가리키는 주소의 데이터가 복사된다.
ESP
하나의 스택 프레임의 끝 지점 주소가 저장된다.
PUSH, POP명령어에 따라서 ESP의 값이 4BYTE씩 변한다.
EBP
하나의 스택 프레임의 시작 지점 주소가 저장된다. 현재 사용되는 스택 프레임이 소멸되지 않는 동안 EBP의 값은 변하지 않는다.
현재의 스택 프레임이 소멸되면 이전에 사용되던 스택 프레임을 가리키게 된다.
명령 포인터
EIP
다음에 실행해야 할 명령어가 존재하는 메모리 주소가 저장된다.
현재 명령어를 실행 완료 한 후에 EIP레지스터에 저장되어 있는 주소에 위치한 명령어를 실행하게 된다.
실행전 EIP 레지스터에는 다음 실행해야 할 명령어가 존재하는 주소의 값이 저장된다.
세그먼트 레지스터
CS(Code Segment)
실행 가능한 명령어가 존재하는 세그먼트의 오프셋이 저장된다.
DS(Data Segement)
프로그램에서 사용되는 데이터가 존재하는 세그먼트의 오프셋이 저장된다.
SS(Stack Segment)
스택이 존재하는 세그먼트의 오프셋이 저장된다.
플래그 레지스터
CF(Carry Flag)
부호 없는 연산 결과가 용량보가 클 때 세트(1) 된다.
ZF(Zero Flag)
연산 결과가 0일때 세트된다. 연산결과가 0이 아닐때 해제(0)된다.
OF(Overflow Flag)
부호가 있는 연산결과가 용량보다 클 때 세트된다.
SF(Sign Flag)
연산 결과가 음수가 되었을 때 세트된다.
연산 결과가 양수가 되었을 때는 해제된다.
DF(Direction Flag)
문자열 처리에서 연속되는 문자열의 처리 방향에 따라 세트된다.
부동 소수점 데이터 레지스터
범용레지스터의 이름들을 보면 첫글자에 E가 붙은것을 볼 수 있다.
이는 컴퓨터가 32bit 환경이 되면서 16bit 레지스터들이 확장되면서 붙게 된것이다.
EAX, EBX, ECX, EDX레지스터는 32bit 16bit, 8bit 로 사용할 수 있다.
EAX레지스터를 예로 들면
32bit 에서는 EAX, 16bit 에서는 AX, 8bit에서는 AH, AL로 사용할 수 있다.
AH는 상위 8bit, AL는 하위 8bit를 말한다.
ESI, EDI, EBP, ESP레지스터는 32bit, 16bit로 사용이 가능하다.
ESI 를 예로 들면 32bit ESI, 16bit는 SI로 사용한다.
어셈블리 언어
데이터타입
타입 |
설명 |
BYTE |
8비트 부호 없는 정수 |
SBYTE |
8비트 부호 있는 정수 |
WORD |
16비트 부호 없는 정수 |
SWORD |
16비트 부호 있는 정수 |
DWORD |
32비트 부호 없는 정수 |
SDWORD |
32비트 부호 있는 정수 |
FWORD |
48비트 정수 |
QWORD |
64비트 정수 |
TBYTE |
80비트 정수 |
피연산자 타입
피연산자 |
설명 |
r8 |
8비트 범용 레지스터 |
r16 |
16비트 범용 레지스터 |
r32 |
32비트 범용 레지스터 |
Reg |
임의의 범용 레지스터 |
Sreg |
16비트 세그먼트 레지스터 |
Imm |
8, 16, 32비트 즉시값 |
Imm8 |
8비트 즉시값 |
Imm16 |
16비트 즉시값 |
Imm32 |
32비트 즉시값 |
r/m8 |
8비트 범용 레지스터, 메모리 |
r/m16 |
16비트 범용 레지스터, 메모리 |
r/m32 |
32비트 범용 레지스터, 메모리 |
mem |
8, 16, 32비트 메모리 |
'Study > Reversing' 카테고리의 다른 글
키젠문제 풀이 (0) | 2015.05.18 |
---|---|
Unpack, Back To User mode (0) | 2015.05.18 |
어셈블리 명령어 (0) | 2015.05.15 |
abexcm1.exe풀이 (0) | 2015.05.14 |
올리디버거 다운로드 및 설정 (1) | 2015.05.13 |
댓글