어셈블리어 기초
10진수와 2진수, 16진수를 표현하면 다음과 같이 표현할 수 있습니다.
10진수 2진수 16진수
1 1 1
2 10 2
3 11 3
4 100 4
5 101 5
6 110 6
7 111 7
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F
16 10000 10
17 10001 11
----------------------------------------------
범용 레지스터에 대하여 간단하게 알아보면 AX, BX, CX, DX가 있습니다.
여러 가지의 레지스터가 더 있지만, 우선 이 4가지의 레지스터에 대하여 알아보겠습니다.
AX(Accumulator Register, 16Bit), EAX(Extended AX), RAX(64Bit)
곱셈과 나눗셈 명령에서 자동으로 사용되고 함수의 리턴 값이 저장되는 용도로 사용합니다.
BX(Base Register, 16Bit), EBX(Extended AX, 32Bit), RBX(64Bit)
ESI나 EDI와 결합하여 인덱스에 사용합니다.
CX(Counter Register, 16Bit), ECX(Extended CX, 32Bit), RCX(64Bit)
반복 명령어 사용시 반복 카운터로 사용합니다.
DX(Data Register, 16Bit), EDX(Extended DX, 32Bit), RDX(64Bit)
AX와 같이 쓰이며 부호 확장 명령 등에 사용합니다.
그 중 AX(Accumulator Register, 16Bit)을 살펴보면 상위 8Bit을 AH, 하위 8Bit을 AL이라고 합니다. AX뿐만 아니라 다른 BX, CX, DX도 BH, CL, DH 등 사용하는 방식은 같습니다.
실습 환경
VMware Workstation 15 Player (FREE 버전)
Windows XP Professional SP3 (32Bit)
먼저 CMD 창을 실행합니다.
debug 명령어를 입력합니다.
debug을 입력하고 나면 “-” 하나만 창에 표시됩니다.
-a 100을 입력합니다.
MOV AH, 11
MOV AL, 22
입력한 다음 Enter 키를 한번 더 눌러줍니다.
“-”가 나오시면 됩니다.
그런 다음 실행을 하면 입력한 값들을 컴파일 하게 됩니다.
a 100이라고 입력을 하시면 100번지 주소부터 값을 입력하겠다는 뜻입니다.
MOV 왼쪽에 보시면 0100에서 시작하시는 것을 볼 수 있습니다.
이어서 MOV 명령어는 뒤에 있는 값을 앞의 레지스터에 입력하는 명령어입니다.
MOV AH, 11의 경우에는 11이란 숫자의 값을 AH에 입력한다는 뜻 입니다.
MOV AL, 22의 경우에는 22이란 숫자의 값을 AL에 입력한다는 뜻 입니다.
여기서 AX의 상위 8Bit는 AH이고, 하위 8Bit는 AL입니다.
코드를 실행하여 확인해보겠습니다.
먼저 r을 입력합니다.
현재의 레지스터 상태를 확인할 수 있습니다.
현재 AX=0000 입니다.
그리고 다음 실행할 코드인 MOV AH, 11이 보입니다.
t을 입력하면 어셈블리어 코드가 한 줄씩 실행됩니다.
AX=1100으로 바뀌었습니다.
다음 실행 코드도 MOV AL, 22로 바뀌었습니다.
한번 더 t을 입력합니다.
AX=1122로 바뀌었습니다.
종료하실 때는 q을 입력하시면 됩니다.
q을 이용하여 종료하신 후 같은 CMD 창에서 debug을 실행하실 경우 debug하기 전에 cls 명령어로 CMD창의 내용을 한 번 지운 후 실행하시면 정상 작동합니다.
이상으로 어셈블리어 기초에 대하여 알아보았습니다.
감사합니다.
'어셈블리어와 악성코드' 카테고리의 다른 글
어셈블리어 명령어 [CMP, JMP, CALL] (0) | 2018.11.18 |
---|---|
어셈블리어 명령어 [ADD, SUB] (0) | 2018.11.17 |
어셈블리어 명렁어 [MOV, INC, DEC] (0) | 2018.11.16 |
랜섬웨어(Ransomware) (0) | 2018.11.13 |
악성코드와 악성코드의 역사 (0) | 2018.11.12 |