C300_057
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 | #include <stdio.h> #include <string.h> void main(void) { char string[200]; printf("문장을 입력한 후, Enter 키를 치세요 !\n"); printf("아무것도 입력하지 않으면 프로그램은 종료됩니다 !\n"); do { gets(string); if (strlen(string) == 0) { break; } printf("문자열의 길이는 %d입니다. \n", strlen(string)); } while (1); } | cs |
IDA - Layout Graph
IDA - Text View
strlen을 구현하는 코드이다.
우선 문자열이 NULL 문자까지 읽어들이면서 주소값을 1씩 증가시킨다.
문자열이 NULL을 만나면 원래의 주소에서 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 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 58 59 60 | #include <stdio.h> void main(void) { char var_1; char var_2; char var_8[6]; int var_C; int var_10; int var_14; int var_18; int var_1C; char string[100]; printf(_Format); printf(byte_40303C); while(1){ eax = string; gets(eax); ecx = string; var_8 = ecx; edx = var_8; edx = edx + 1; var_10 = edx; do{ eax = var_8; cl = [eax]; var_1 = cl; var_8 = var_8 + 1; }while(var_1 != NULL) edx = var_8; edx = edx - var_10; var_14 = edx; eax = string; var_C = eax; ecx = var_C; ecx = ecx + 1; var_18 = ecx; do{ edx = var_C; al = [edx]; var_2 = al; var_C = var_C + 1; }while(var_2 != NULL) ecx = var_C; ecx = ecx - var_18; var_1C = ecx; edx = var_1C; printf(_Format, edx); } eax = 0; } | 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 34 35 36 37 38 39 40 41 42 43 | #include <stdio.h> void main(void) { char var_1; char var_2; char var_8[6]; int var_C; int var_10; int var_14; int var_18; int var_1C; char string[100]; printf(_Format); printf(byte_40303C); while(1){ gets(string); var_8 = string; var_10 = string + 1; while(*string++ != NULL) var_14 = var_8 - var_10; // var_14에 string의 길이가 저장된다. if(var_14 == 0) break; else{ var_C = string; var_18 = string + 1; while(*string++ != NULL); var_1C = var_C - var_18 // var_1C에 string의 길이가 저장된다. printf(_Format, var_1C); } } return 0; } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 059 (strchr) (0) | 2018.07.17 |
---|---|
ASM to C with IDA - 058 (strstr) (0) | 2018.07.16 |
ASM to C with IDA - 056 (strcat) (0) | 2018.07.16 |
ASM to C with IDA - 055 (strncmp) (0) | 2018.07.12 |
ASM to C with IDA - 054 (strcmp) (0) | 2018.07.12 |