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 |