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 명령어에 의해 반복하게 된다.
'Reverse Engineering' 카테고리의 다른 글
10. 콜린 컨베션 __stdcall 함수의 어셈블리어 코드 (0) | 2016.11.10 |
---|---|
9. 콜린 컨벤션 __cdecl 함수 어셈블리어 코드 (0) | 2016.11.10 |
7. for 리버싱 for문이 포함된 어셈블리어 코드 (0) | 2016.11.10 |
6. 6개의 분기가 포함된 어셈블리어 코드 (0) | 2016.11.10 |
5. switch문이 포함된 어셈블리어 코드 (0) | 2016.11.10 |