본문으로 바로가기

ASM to C with IDA - 003

category Reversing/ASM to C 2018. 5. 24. 14:49

C300_003


C003_소스코드


1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h> 
 
#define  X   1
#define  PI  3.141592
 
main() 
    double z;
         
    z = X + PI;
    
    printf"%f", z );
cs



IDA - Layout Graph





IDA - Text View




xmm0는 부동 소수점용으로 사용되는 범용 레지스터이다.



_real@401090fd7e45803d는 4.141592이다.

movsd(move string dword): dword 단위로 복사한다.


WORD = 2byte

DWORD = 4byte

QWORD = 8byte


의사코드 - pseudo code



1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h> 
 
main()
{
    xmm0 = 4.141592;
    z = xmm0;
    xmm0 = z;
    esp = xmm0
 
    xmm0 = z;
    printf("%f", xmm0);         
    eax = 0;
}
cs


최종 의사코드 - pseudo code



1
2
3
4
5
6
7
#include <stdio.h>
{
    double = 4.141592;
    z = 4.141592;
    
    printf("%f", z);
}
cs



실제 코드와 비교해보면 실제 코드에서

# define X = 1;

# define PI = 3.141592;


z = X + PI를 진행하는데 


#define은 컴파일 과정 중 전처리 과정에서 매크로 함수가 처리되어

어셈블리어로 볼 수 없는것 같다.


또한 16 byte를 빼주고(sub) 나중에 12바이트만 더해주었는데(add)

나머지 남은 4 byte 공간은 String이 올라갈 영역의 크기인것 같다.  (???? 흠..)


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

ASM to C with IDA - 006  (0) 2018.05.25
ASM to C with IDA - 005  (0) 2018.05.25
ASM to C with IDA - 004  (1) 2018.05.25
ASM to C with IDA - 002  (0) 2018.05.24
ASM to C with IDA - 001  (0) 2018.05.24