본문으로 바로가기

ASM to C with IDA - 020

category Reversing/ASM to C 2018. 5. 30. 11:00

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