본문 바로가기

Reverse Engineering

8. while문이 포함된 어셈블리어 코드

8. while문이 포함된 어셈블리어 코드

 

 

 

 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지

 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다.

 

 

 

 

 

#include <stdio.h>



int main()

{

int lv=0;

while (true) {

if (lv == 2)

break;

printf("%x ", lv);

lv++;

}

return 0;


}

 

 

 

[발췌-수정]

013A13EE 주소에서 지역 변수인 Lv([EBP-8)에 먼저 0을 할당한다. 013A13FE 주소에서 CMP 명령어로 2와

먼저 비교해 , 013A13FC 주소의 JNZ(jump not zero) 명령어에 의해 [EBR-8]에 할당된 변수가 2가 아니면 점프를 

실행한다. 2일 경우 다음 013A1404 주소의 JMP 명령어를 실행해 본복문을 빠져나간다.

C 소스에서 break에 해당하는 부분이다.

2가 아닐 경우 다음 코드를 실행하고 제일 아래 013A142A 주소의 JMP 명령어에 의해 반복하게 된다.