[어셈블리] OR 연산 [어셈블리] OR 연산 #includeint main() { int a=9; printf("%d\n", a); // 9의 2진수 값은 1001 _asm { or a, 0x07 // 7의 2진수 값은 0111 } printf("%d\n", a); // 1001 과 0111 을 OR 연산 하면 1111이다 따라서 15가 추력된다 return 0; } 결과915 IT기초/어셈블리 2014.09.08
[어셈블리] XOR 연산 [어셈블리] XOR 연산 #includeint main() { int a=12; printf("%d\n", a); //12의 2진수표현은 1100 이다 _asm { xor a, 0x08 // 8의 2진수표현은 1000 이다 } printf("%d\n", a); // 1100 과 1000 의 XOR 계산값은 0100이다 따라서 4가 출력된다 return 0; } 결과124 IT기초/어셈블리 2014.09.08
[어셈블리] SHL & SHR ( 왼쪽 // 오른쪽으로 ~~칸씩 이동) [어셈블리] SHL & SHR ( 왼쪽 // 오른쪽으로 ~~칸씩 이동) #includeint main() { int a=4; printf("%d\n", a); // 4의 2진수 값은 0100 이다 _asm { shl a, 0x01 } printf("%d\n", a); // 0100 의 각 숫자가 각각 한칸에 들어갔다고 생각할때 SHL 은 왼쪽으로 한칸 이동!! 따라서 1000 이된다 _asm { shr a, 0x02 } printf("%d\n", a); // 1000 에서 오른쪽으로 두칸 이동하면 0010 이 된다 따라서 2가 출력 return 0; } 결과482 IT기초/어셈블리 2014.09.08
[어셈블리] PUSH & POP [어셈블리] PUSH & POP #includeint main(){ int a=1; _asm { push a // 물통에 a 를 집어넣는다 push 0x10 // a위에 16을 집어넣는다 push eax // 16위에 eax 를 집어 넣는다 pop eax // 위에부터 차례로 빼낸다 pop a // 16이 a 로 빠져나온다 pop ebx // } printf("%d\n", a); return 0;} 결과16 IT기초/어셈블리 2014.09.08
[어셈블리] PTR [어셈블리] PTR #includeint main() { int value = 1; printf("%x\n", value); _asm { mov word ptr value, 0x11111111 // word 는 4바이트 만큼 사용하겠다는 말 } printf("%x\n", value); _asm { mov dword ptr value, 0x11111111 // dword 는 8바이트 만큼 사용하겠다는말 } printf("%x\n", value); return 0; } 결과 1111111111111 IT기초/어셈블리 2014.09.08
[어셈블리] OFFSET [어셈블리] OFFSET #includeint global = 30;int main() { int addr = 0; int value = 0; _asm { mov eax, offset global mov addr, eax mov ebx, [eax] mov value, ebx } printf("addr : %p \n", addr); printf("value : %d \n", value); return 0; } IT기초/어셈블리 2014.09.08
어셈블리 - REP 어셈블리 - REP #includeint main() { char buffer[20]; _asm { mov eax, 0x00 lea edi, dword ptr [buffer] mov ecx, 0x05 rep stos dword ptr [edi] // ecx 가 0보다 크면 반복 } printf("%s\n", buffer); return 0; } IT기초/어셈블리 2014.09.08