본문으로 바로가기

ASM to C with IDA - 070

category Reversing/ASM to C 2018. 7. 20. 11:13

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