2020. 1. 13. 00:01ㆍ정보보안
@ 어셈블리(switch)
1. 'switch' 구문
- 조건에 만족하면 코드를 실행하는 조건문이다.
- 대신, if 구문과 차이점은 변수 값에 따라서 다른 동작을 실시할 수 있다.
- 또한, 'break' 제어문과 같이 사용하여 조건에 만족되면 코드를 실행하고 조건 검사를 종료할 수 있다.
- switch 구문 형식은 다음과 같다.
switch (변수)
{
case 값1:
// 값이 '1'인 경우 실행하는 코드
break;
case 값2:
// 값이 '2'인 경우 실행하는 코드
break;
default:
// 위에 조건이 아닌 경우 마지막에 실행하는 코드
}
1) VS 2008을 이용하여 'switch.exe' 파일을 제작한다.
- 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름(switch) -> 확인
- '소스 파일' 우클릭 -> 추가 -> 새 항목 -> 'C++ 파일(.cpp)' 선택 -> 이름(switch) -> 추가
#include
#include
#pragma comment(lib, "user32")
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nCmd)
{
int num1 = 3;
switch (num1) {
case 1:
MessageBox(NULL, "num1 is 1", "switch 구문(case 1:)", MB_OK);
break;
case 2:
MessageBox(NULL, "num1 is 2", "switch 구문(case 2:)", MB_OK);
break;
case 3:
MessageBox(NULL, "num1 is 3", "switch 구문(case 3:)", MB_OK);
break;
default:
MessageBox(NULL, "num1 is not 1,2,3", "switch 구문(default:)", MB_OK);
break;
}
return 0;
}
- 파일 -> 모두 저장 -> 닫기
2) 'cl' 명령어를 이용한 최적화 컴파일 실시
C:\리버싱\04_테스트\switch\switch>cl switch.cpp /link /debug /opt:icf,ref
Microsoft (R) 32비트 C/C++ 최적화 컴파일러 버전 15.00.30729.01(80x86)
Copyright (c) Microsoft Corporation. All rights reserved.
switch.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation. All rights reserved.
/out:switch.exe
/debug
/opt:icf,ref
switch.obj
C:\리버싱\04_테스트\switch\switch>dir
2. 올리디버거를 이용한 'switch.exe' 분석
- 메모리 주소, 레지스터 저장 값, 스택 내용, 메모리 덤프 내용, 비교 및 분기 내용 확인