어셈블리(switch)

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' 분석

 - 메모리 주소, 레지스터 저장 값, 스택 내용, 메모리 덤프 내용, 비교 및 분기 내용 확인

'정보보안' 카테고리의 다른 글

어셈블리(while)  (0) 2020.01.13
어셈블리(for)  (0) 2020.01.13
어셈블리(JG)  (0) 2020.01.12
어셈블리(JL)  (0) 2020.01.12
어셈블리(JGE)  (0) 2020.01.12