728x90

switch.exe

main() 함수 전체

분석

switch 문으로 num(임의변수명) =1 이 스위치 문으로 들어가 동작

 

switch()문 동작 확인

 

cmp dword ptr ss:[ebp-4],0

ebp-4 와 0 을 비교할 때 flag 변화 ****

상태 플러그인 ZF :
산술 (1 - [ebp-4] ) 의 결과가 0 이면 1로 그렇지 않으면 0 으로 설정 됨

JE (Jump if Equal :
CMP 로 비교했을 때 두 값이 같으면 점프

코드 구현

#include <stdio.h>

int main() {
    
    int a; // sub esp, 0x8
    a = 1;

    switch (a)
    {
    case 0: // cmp dword ptr ss:[ebp-0x4], 0x0 ; je 0x010F1067
        printf("0을 입력했습니다.\n");
        break;
    case 1: // cmp dword ptr ss:[ebp-0x4], 0x1 ; je 0x010F1076
        printf("1을 입력했습니다.\n");
        break;
    case 2: // cmp dword ptr ss:[ebp-0x4], 0x2 ; je 0x010F1085
        printf("2을 입력했습니다.\n");
        break;
    default: // jmp 0x010F1094
        printf("해당사항 없음.\n");
        break;
    }// end switch

    return 0; 
} // end main

 

switch2.exe

main() 함수 분석

임의 변수 num = 1;
cmp dword ptr ss:[ebp-0x4], 0x3 ; ebp -4 와 3을 비교
ja switch2.DB109F ; if (ebp >3) ; jump 13E109F
mov ecx,dword ptr ss:[ebp-4] | [ebp-4] 값을 ecx에 저장

 

switch() 문 switch 테이블 참조

 

switch 테이블 확인

 


코드구현

#include <stdio.h>

int main() {
    
    int num = 1;

    switch (num)
    {
    case 0: // cmp dword ptr ss:[ebp-0x4], 0x0 ; je 0x010F1067
        printf("0을 입력했습니다.\n");
        break;
    case 1: // cmp dword ptr ss:[ebp-0x4], 0x1 ; je 0x010F1076
        printf("1을 입력했습니다.\n");
        break;
    case 2: // cmp dword ptr ss:[ebp-0x4], 0x2 ; je 0x010F1085
        printf("2을 입력했습니다.\n");
        break;
    default: // jmp 0x010F1094
        printf("해당사항 없음.\n");
        break;
    }// end switch

    return 0; 
} // end main



// goto 문으로 구현

#include <stdio.h>

int main() {
    int num =3;

    switch (num)
    {
    case 0:
        goto ZERO;
    case 1:
        goto ONE;
    case 2: 
        break;
    default:
        goto OTHER;
    }

ZERO: 
    printf("0을 입력했습니다.\n"); 
    goto END;
ONE: 
    printf("1을 입력했습니다.\n"); 
    goto END;
TWO: 
    printf("2을 입력했습니다.\n"); 
    goto END;
OTHER: 
    printf("해당사항 없음.\n"); 
    goto END;
END:
    return 0;

}// end main

'Reversing' 카테고리의 다른 글

Basic_BOF 1  (0) 2021.08.25
if.exe ; if_hard.exe  (0) 2021.07.21
Reversing 01.  (0) 2021.07.21
리버스 엔지니어링 개요  (0) 2021.07.20

+ Recent posts