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 |