본문으로 바로가기

ASM to C with IDA - 047

category Reversing/ASM to C 2018. 7. 10. 09:12

C300_047



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
#include <stdio.h>
#include <conio.h>
 
int print(char *string);
 
void main(void)
{
    print("This is a putch function !");
}
 
int print(char *string)
{
    int len = 0;
 
    while (*string != (int)NULL)
    {
        putch(*string);
        string++;
        len++;
    }
 
    // 현재 출력되고 있는 줄을 다음 줄의 첫 번째로 이동                    
    putch('\r');        // Carriage Return
    putch('\n');        // Line Feed
 
    return len;
}
cs




IDA - Layout Graph




IDA - Text View




movsx: 부호있는 산술값에 사용기 때문에 피연산자의 왼쪽 비트를 부호비트로 채운다..

    바이트나 워드를 목적지에 전송한다.


string = dword ptr 8을 통해 string이 print 함수의 parameter라는 것을 알 수 있다.

또한 movsx를 통해 byte 단위를 옮기므로 char type인것을 확인했다.


eax 는 return 값을 전달하기 위해 사용하는 레지스터이다.

print 함수를 종료하기 전에 len을 eax에 저장하므로 int return을 한다는 것을 알 수 있다.



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
#include <stdio.h>
#include <conio.h>
 
int print(char *string)
{
    len = 0;
 
    eax = string;
    ecx = [eax];
    while(ecx != NULL)
    {
        edx = string;
        eax = [edx];
        putch(eax);
    
        ecx = string;
        ecx = ecx + 1;
        string  = ecx;
 
        edx = len;
        edx = edx + 1;
        len = edx;
 
        eax = string;
        ecx = [eax];
    }
    
    putch('\r');
    putch('\n');
 
    eax = len;
}
 
 
void main(void)
{
    print(string);
 
    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
#include <stdio.h>
#include <conio.h>
 
int print(char *string)
{
    len = 0;
 
    while(*string != NULL)
    {
        putch(*string);
        string++;
        len++;
    }
    
    putch('\r');
    putch('\n');
 
    return len;
}
 
 
void main(void)
{
    print(string);
}
cs



'Reversing > ASM to C' 카테고리의 다른 글

ASM to C with IDA - 049  (0) 2018.07.10
ASM to C with IDA - 048  (0) 2018.07.10
ASM to C with IDA - 046  (0) 2018.07.09
ASM to C with IDA - 045  (0) 2018.07.09
ASM to C with IDA - 044  (0) 2018.07.09