C300_052
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <stdio.h> #include <string.h> #define KOREA "대한민국" void main(void) { char *string1; char string2[100]; strcpy(string1, KOREA); strcpy(string2, KOREA); strcpy(string2, "봄"); } | cs |
IDA - Layout Graph
IDA - Text View
한글은 유니코드를 사용하고 있다. 유니코드는 한글자에 2바이트이다.
효율성을 위해 strcpy는 한번에 4바이트 씩, 2글자 씩 옮기고 있다.
또한 string의 맨 마지막에 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 *string1; char string2[100]; eax = string1; ecx = dword_403030; [eax] = ecx; edx = dword_403034; [eax+4] = ecx; cl = dword_403038 [eax+8] = cl; edx = dword_403024; [string2] = edx; eax = dword_403028; [string2+4] = eax; cl = byte_40302C; [string2+8] = cl; dx = word_403020; [string2] = dx; al = byte_403022; [string2+2] = al; 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 | #include <stdio.h> void main(void) { int *string1; char string2[100]; [string1] = dword_403030; [string1+4] = dword_403034; [string1+8] = dword_403038; [string2] = dword_403024; [string2+4] = dword_403028; [string2+8] = byte_40302C; [string2] = word_403020; [string2+2] = byte_403022; return 0; } | cs |
dword_403030 = "대한"
dword_403034 = "민국"
dword_403048 = NULL
dword_403024 = "대한"
dword_403028 = "민국"
dword_40302C= NULL
dword_403020 = "봄"
dword_403022 = NULL
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 054 (strcmp) (0) | 2018.07.12 |
---|---|
ASM to C with IDA - 053 (0) | 2018.07.12 |
ASM to C with IDA - 051 (0) | 2018.07.11 |
ASM to C with IDA - 050 (0) | 2018.07.11 |
ASM to C with IDA - 049 (0) | 2018.07.10 |