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 |