C300_020
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> main() { int x = 1; printf("x = %d \n", x++); // x = 1 printf("x = %d \n", x++); // x = 2 printf("x = %d \n", ++x); // x = 4 printf("x = %d \n", x--); // x = 4 printf("x = %d \n", x--); // x = 3 printf("x = %d \n", --x); // x = 1 } | cs |
IDA - Layout Graph
IDA - Text View
어셈블리어에서 전위 연산자(++x), 후위 연산자(x++)과 같은 명령어는 따로 존재하지 않고,
위 연산자를 만났을 때 add위 위치를 앞에서 수행할 지 뒤에서 수행할 지 결정하여 연산한다.
pseudo code - 의사코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <stdio.h> main() { int x; var_8; var_C; var_10; var_14; x = 1; eax = x; var_8 = eax; ecx = var_8; printf(_Format , ecx); edx = x; edx = edx + 1; x = edx; eax = x; var_C = eax; ecx = var_C; printf(aXD_0, ecx); edx = x; edx = edx + 1; x = edx eax = x; eax = eax + 1; x = eax; ecx = x; printf(aXD_1, ecx); edx = x; var_10 = edx; eax = var_10; printf(aXD_2, eax); ecx = x; ecx = ecx - 1; x = ecx; edx = x var_14 = edx; eax = var_14; printf(aXD_3, eax): ecx = x; ecx = ecx - 1; x = ecx; edx = x; edx = edx - 1; x = edx; eax = x; printf(_aXD_4, eax); eax = 0 } | cs |
pseudo code -최종 의사 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h> main() { int x; x = 1; printf(_Format, x++); // x = 1 printf(_aXD_0, x++); // x = 2 printf(_aXD_1, ++x); // x = 4 printf(_aXD_2, x--); // x = 4 printf(_aXD_3, x--); // x = 3 printf(_aXD_4, --x); // x = 1 } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 022 (0) | 2018.05.30 |
---|---|
ASM to C with IDA - 021 (0) | 2018.05.30 |
ASM to C with IDA - 019 (0) | 2018.05.29 |
ASM to C with IDA - 018 (0) | 2018.05.29 |
ASM to C with IDA - 017 (0) | 2018.05.29 |