C300_070
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  | #include <stdio.h> void main(void) {     char cValue = 'a';     int  iValue = 1234567;     long lValue = 7890123;     float fValue = 3.141592;     double dValue = 3.141592;     char *string = "korea";     char buffer[100];     sprintf(buffer, "char  형은 %c", cValue);     puts(buffer);     sprintf(buffer, "int   형은 %d", iValue);     puts(buffer);     sprintf(buffer, "long  형은 %ld", lValue);     puts(buffer);     sprintf(buffer, "float 형은 %f", fValue);     puts(buffer);     sprintf(buffer, "double형은 %e", dValue);     puts(buffer);     sprintf(buffer, "char* 형은 %s", string);     puts(buffer); }  | cs | 
IDA - Layout Graph
IDA - Text View
sprintf 함수: int sprintf(char *buffer, const char *format-string, argument-list);
format-string에 argument-list를 대입해여 buffer에 저장한다. 출력은 하지 않는다.
movss(Move Scalar Single-Precision Floating-Point Value):
float형 값을 이동할 때 사용하는 명령어.
movsd:
doword 크기로 데이터를 복사한다.
movsx:
부호있는 산술 값에 대해 사용해서 부호비트로 목적지 피 연산자의 왼쪽 비트들을 채운다.
cvtss2sd(Convert Scalar Single-Precision Floating Point Value to Scalar Double-Precision Floating-Point Value):
float 실수형을 double 실수형으로 확장한다.
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 61 62 63 64 65 66  | #include <stdio.h> void main(void) {     char cValue;     char iValue[7];     long lValue;     float fValue;     char *string;     double dValue;     char buffer[100];     double var_88;     cValue = 'a';     iValue = 1234567;     lValue = 7890123;     xmm0 = 3.141592;     fValue = xmm0;     xmm0 = 3.141592;     dValue = xmm0;     dValue = xmm0;     string = "korea";     eax = cValue;     ecx = buffer;     sprintf(ecx, _Format, eax);     edx = buffer;     puts(edx);     eax = iValue;     ecx = buffer;     sprintf(ecx, aInt, eax);     edx = buffer;     puts(edx);     eax = lValue;     ecx = buffer;     spritnf(ecx, aLong, eax);     ecx = buffer;     puts(ecx);     xmm0 = fValue;     var_88 = xmm0;     eax = buffer;     sprintf(eax, aFloat, var_88);     ecx = buffer;     puts(ecx);     xmm0 = dValue;     var_88 = xmm0     edx = buffer;     sprintf(edx, aDouble, var_88);     eax = buffer;     puts(eax);     ecx = string;     edx = buffer;     sprintf(edx, aChar, ecx);     eax = buffer;     puts(eax);     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  | #include <stdio.h> void main(void) {     char cValue;     char iValue[7];     long lValue;     float fValue;     char *string;     double dValue;     char buffer[100];     double var_88;     cValue = 'a';     iValue = 1234567;     lValue = 7890123;     fValue = 3.141592;     dValue = 3.141592;     string = "korea";     sprintf(buffer, _Format, cValue);     puts(buffer);     sprintf(buffe, aInt, iValue);     puts(buffe);     spritnf(buffe, aLong, lValue);     puts(buffe);     sprintf(buffe, aFloat, fValue);     puts(buffe);     sprintf(buffe, aDouble, dValue);     puts(buffe);     sprintf(buffe, aChar, string);     puts(buffe);     return 0;  }  | cs | 
'Reversing > ASM to C' 카테고리의 다른 글
| ASM to C with IDA - 069 (strdup, strcpy) (0) | 2018.07.20 | 
|---|---|
| ASM to C with IDA - 068 (strrev) (0) | 2018.07.20 | 
| ASM to C with IDA - 067 (strlwr) (0) | 2018.07.19 | 
| ASM to C with IDA - 066 (strupr) (0) | 2018.07.19 | 
| ASM to C with IDA - 065 (strnset) (0) | 2018.07.19 |