본문으로 바로가기

ASM to C with IDA - 059 (strchr)

category Reversing/ASM to C 2018. 7. 17. 08:15

C300_059



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
29
30
31
32
#include <stdio.h>
#include <string.h>
 
#define FIND_CHAR    'h'
 
void main(void)
{
    char string[100];
    char *ret;
 
    puts("문자열을 입력한 후 Enter키를 치세요 !");
    puts("문자열 중에 'h'가 포함되어 있으면, 프로그램은 종료됩니다.");
 
    do
    {
        gets(string);
 
        ret = strchr(string, FIND_CHAR);
 
        if (ret == NULL)
        {
            puts("문자열 중에 'h'가 없습니다.");
        }
        else
        {
            printf("%d 위치에서 'h' 문자를 찾았습니다. ", ret - string);
            break;
        }
 
    } while (1);
}
 
cs




IDA - Layout Graph




IDA - Text View




strchr

strchr 함수는 문자열에서 지정된 문자가 제일 먼저 나타나는 위치를 알 수 있다.

즉, 지정된 문자가 문자열에 포함되어 있는지 알 수 있다.

지정된 문자가 없다면 NULL을 반환하고, 지정된 문자가 있다면 지정된 문자가 있는 포인터를 반환한다.



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
#include <stdio.h>
 
void main(void)
{
    int *ret;
    char string[100];
  do{
      puts(Str);
     puts(byte_403060);
 
   eax = string;
     gets(eax);
    
      ecx = string;
     strchr(ecx, 'h');
 
    ret = eax;
    
      if(ret == NULL)
         puts(byte_403044);
     else{
         edx = ret
         eax = string
         edx = edx - eax;
         printf(_Format,edx);
     }
}while(1);

    eax = 0;
}
 
dcs



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
#include <stdio.h>
 
void main(void)
{
    int *ret;
    char string[100];
    do{
        puts(Str);
        puts(byte_403060);
 
        gets(string);
        
        ret = strchr(string'h');    
 
        if(ret == NULL)
            puts(byte_403044);
        else{
            printf(_Format, ret - string);
            break;
        }while(1)
    return 0;
}
 
cs




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

ASM to C with IDA - 061 (strspn)  (0) 2018.07.17
ASM to C with IDA - 060 (strcspn)  (0) 2018.07.17
ASM to C with IDA - 058 (strstr)  (0) 2018.07.16
ASM to C with IDA - 057 (strlen)  (0) 2018.07.16
ASM to C with IDA - 056 (strcat)  (0) 2018.07.16