정보보안

어셈블리(while)

swzz 2020. 1. 13. 00:02

@ 어셈블리(while)

1. 'while' 구문

 - 일정 횟수를 정해 놓지 않고 조건이 만족할때 까지 반복 작업을 실시하는 반복문이다.
 - while 구문은 어셈블리어에서 초기문 -> 조건분기(아래로) -> 증가문 -> JMP(위로) 패턴을 갖고 있다.

 ① 초기문에 의해서 반복하는 변수의 값이 정해진다.
 ② 조건문을 검사하고 조건에 맞지 않으면 수행문을 수행한다.
 ③ 그리고 조건문으로 다시 이동한다.
 ④ 조건문을 검사하여 조건에 맞지 않으면 다시 증가문을 수행한다.
 ⑤ 만약, 조간에 맞다면 반복을 종료한다.

[참고] for & while

 - for : 100번의 질문을 실시한다.
 - while : 이해할때까지 질문을 실시한다.

 - while 구문 형식은 다음과 같다.

변수의 초기값

while(조건)
{
// 증감 연산
// 반복 작업을 실시할 코드
}


 1) VS 2008을 이용하여 'while.exe' 파일을 제작한다.

 - 파일 -> 새로 만들기 -> 프로젝트 -> 빈 프로젝트 -> 위치(04_테스트) & 이름(while) -> 확인
 - '소스 파일' 우클릭 -> 추가 -> 새 항목 -> 'C++ 파일(.cpp)' 선택 -> 이름(while) -> 추가

#include 
#include 
#pragma comment(lib, "user32")

int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrev, LPSTR lpCmd, int nCmd)
{
int num1 = 0;
char str[24];

while(num1<5) {
num1++;
sprintf(str, "Loop Count = %d Time", num1);
MessageBox(NULL, str, "while 구문", MB_OK);
}
return 0;
}


 - 파일 -> 모두 저장 -> 닫기


 2) 'cl' 명령어를 이용한 최적화 컴파일 실시

C:\리버싱\04_테스트\while\while>cl while.cpp /link /debug /opt:icf,ref
Microsoft (R) 32비트 C/C++ 최적화 컴파일러 버전 15.00.30729.01(80x86)
Copyright (c) Microsoft Corporation.  All rights reserved.

while.cpp
Microsoft (R) Incremental Linker Version 9.00.30729.01
Copyright (C) Microsoft Corporation.  All rights reserved.

/out:while.exe
/debug
/opt:icf,ref
while.obj

C:\리버싱\04_테스트\while\while>dir


2. 올리디버거를 이용한 'while.exe' 분석

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