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 |