C300_048
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> void main(void) { int count; // 3회를 카운트하기 위한 변수 int tmp; // 정수값을 읽을 임시 변수 int total = 0; // 읽은 정수값을 합산하기 위한 변수 for (count = 1; count <= 3; count++) { printf("%d 번째 정수값을 입력한 후 Enter키를 누르세요. \n", count); scanf("%d", &tmp); total += tmp; printf("입력 값 = %d, 총 합 = %d \n", tmp, total); } printf("읽은 정수의 총 합은 %d입니다. \n", total); } | cs |
IDA - Layout Graph
IDA - Text View
scanf 와 printf의 차이를 간단히 살펴보자.
printf는 주로 포맷 스트링을 이용해 값, 문자열을 출력한다.
하지만 scanf는 사용자로부터 입력을 받아 메모리에 저장한다.
C048 에서 printf로 값을 출력하고, scanf로 값을 저장한다.
따라서 printf에서는 값의 출력을 위해 mov를 사용하고 scanf는 주소에 값을 저장하기 위해 lea를 사용한다.
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 | #include <stdio.h> void main(void) { int count; int total; int tmp; total = 0; count = 1; for(count=1; count <=3; count ++) { ecx = count; printf(_Format, ecx); edx = tmp; scanf(aD, edx); eax = total; eax = eax + tmp; total = eax; ecx = total edx = tmp; printf(byte_403040, edx, ecx); } eax = total printf(byte_403020, 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 | #include <stdio.h> void main(void) { int count; int total; int tmp; total = 0; count = 1; for(count=1; count <=3; count ++) { printf(_Format, count); scanf(aD, &tmp); total = total + tmp; printf(byte_403040, tmp, total); } printf(byte_403020, total); return 0; } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 050 (0) | 2018.07.11 |
---|---|
ASM to C with IDA - 049 (0) | 2018.07.10 |
ASM to C with IDA - 047 (0) | 2018.07.10 |
ASM to C with IDA - 046 (0) | 2018.07.09 |
ASM to C with IDA - 045 (0) | 2018.07.09 |