본문으로 바로가기

ASM to C with IDA - 050

category Reversing/ASM to C 2018. 7. 11. 10:29

C300_050



C300_소스코드



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
#include <stdio.h>
 
int count(char *str);
 
void main(void)
{
    char string[100];
    char *ret;
 
    ret = gets(string);
 
    if (ret != NULL)
    {
        printf("문자 'a'의 개수는 %d개입니다. ", count(string));
    }
}
 
int count(char *str)
{
    int cnt = 0;
 
    while (*str != (int)NULL)
    {
        if (*str++ == 'a') cnt++;
    }
 
    return cnt;
}
cs



IDA - Layout Graph





IDA - Text View





movsx: 부호 있는 산술값에 사용되기 때문에 피연산자의 왼쪽 비트를 부호비로 채운다.

바이트나 워드를 목적지에 전송한다.



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
#include <stdio.h>
 
void main(void)
{
    char *ret;
    char string[100];
 
    eax = string;
    gets(eax);
    ret = eax;
    
    if(ret != NULL){
        ecx = string;
        count(ecx);
        printf(_Format, eax);
    }    
    eax = 0;    
}
 
 
int count(char *str)
{
    int cnt;
     int var_8;
 
    cnt = 0;
    
    eax = str;
    ecx = [eax];
    while(ecx != NULL){
        edx = str;
        eax = [edx];
        var_8 = eax;
 
        ecx = str;
        ecx = ecx + 1;
        str = ecx;
 
        if(var_8 == 97)
            edx = cnt;
            edx = edx + 1;
            cnt = edx;
    }
    eax = cnt;
}
 
cs




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
#include <stdio.h>
 
void main(void)
{
    char *ret;
    char string[100];
 
    get = gets(string);
    
    if(ret != NULL){
        count(string);
        printf(_Format, eax);
    }    
    return 0;    
}
 
 
int count(char *str)
{
    int cnt;
     int var_8;
 
    cnt = 0;
    
    while(*str != NULL){
        var_t = *str
        *str++
        if(var_8 == 'a')
            cnt++;
    }
    return cnt;
}
 
cs









'Reversing > ASM to C' 카테고리의 다른 글

ASM to C with IDA - 052 (strcpy)  (0) 2018.07.11
ASM to C with IDA - 051  (0) 2018.07.11
ASM to C with IDA - 049  (0) 2018.07.10
ASM to C with IDA - 048  (0) 2018.07.10
ASM to C with IDA - 047  (0) 2018.07.10