Calc.exe 분석
전체 직역
어셈블리어 해석
1.
20바이트 확보 후 scanf() 로 입력받음
2.
연산자에 -42 실행, 각 연산자 별 실행결과 ( + = 1, - = 3, * = 0 , / = 5)
3.
5보다 클수 없으니 5 초과 시 “잘못된 수식입니다” 출력(if문) 그 외에는 각 숫자별로 swich 문으로 실행
4.
swich 문 구현 전 if 문에서 5 기준으로 판별했기 때문에 스위치로 올 수 있는 수는 0, 1, 2, 3, 4, 5
총 6개이다, *=0 +=1 -=3 /=5 이므로 2, 4에 대한 예외처리도 진행되어야함 (어셈블리어 스위치 테이블 또한 그렇게 되어있다)
C언어 코드 구현
#include <stdio.h>
int main(void)
{
int num1, num2;
char opt;
printf("연산할 수식을 입력하시오 : ");
scanf("%d %c %d",&num1, &opt, &num2);
opt -= '*';
if (opt > 5) {
printf("잘못된 수식입니다");
}
switch (opt)
{
case 0:
printf("%d + %d = %d", num1, num2, num1 * num2);
break;
case 1:
printf("%d - %d = %d", num1, num2, num1 + num2);
break;
case 2:
printf("잘못된 수식입니다");
break;
case 3:
printf("%d - %d = %d", num1, num2, num1 - num2);
break;
case 4:
printf("잘못된 수식입니다");
break;
case 5:
printf("%d / %d = %d", num1, num2, num1 / num2);
break;
}
return 0;
}
C
복사
연산 스위칭
각 어셈블리어 및 푸쉬하는 문자열을 바꿔서 연산 스위칭