Introfor

Assembly Language 본문

Doing/Reversing

Assembly Language

YongArtist 2016. 9. 23. 14:49

Assembly Instruction

Data Type
BYTE : 8bit
WORD : 16bit
DWORD : 32bit

Operand Type
r8 : 8bit 범용 레지스터
r16 : 16bit 범용 레지스터
r32 : 32bit 범용 레지스터
Reg : 임의의 범용 레지스터
imm8 : 8bit 즉시값
imm16 : 16bit 즉시값
imm32 : 32bit 즉시값


INC(Increase)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main() {
    int a = 0;
    printf("%d\n", a);
 
    _asm {
        INC a // INC는 operand의 값에 +1만큼 증가시킨다.
        inc a
    }
    printf("%d\n", a);
 
    return 0;
}
cs


DEC(Decrease)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main() {
    int a = 0;
    printf("%d\n", a);
 
    _asm {
        DEC a // DEC는 operand의 값에 -1만큼 시킨다.
        dec a
    }
    printf("%d\n", a);
 
    return 0;
}
cs


ADD

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
    int a = 0;
    printf("%d\n", a);
 
    _asm {
        ADD a, 123 // ADD는 a에 123을 더해서 a에 저장한다.
    }
    printf("%d\n", a);
 
    return 0;
}



SUB(Subtract)

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main() {
    int a = 0;
    printf("%d\n", a);
 
    _asm {
        SUB a, 123 // SUB는 a에 123을 빼서 a에 저장한다.
    }
    printf("%d\n", a);
 
    return 0;
}
cs


MOV(Move)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
 
int main() {
    int a = 0;
    printf("%d\n", a);
 
    _asm {
        MOV a, 0x10 // MOV는 0x10의 값을 a에 복사한다.
                    // mov reg, reg는 가능하지만 mov reg, mem은 불가능.
    }
    printf("%d\n", a);
 
    return 0;
}
cs


INT(Interrupt)

1
2
3
4
5
6
7
8
#include <stdio.h>
int main() {
    _asm {
        INT 3 // 소프트웨어 인터럽트를 발생시켜 운영체제의 서브루틴을 호출.
        INT imm // imm은 8,16,32bit 즉시값.    
    }
    return 0;
}
cs


'Doing > Reversing' 카테고리의 다른 글

Crackme 1_abexcm1  (0) 2016.09.20
PE(Portable Executable) File Format  (0) 2016.08.12
[Tool] Sothink SWF Decompiler  (0) 2016.07.08
Comments