본문 바로가기
Programming/Hacking & Security

[Reversing] switch, if, while, do~while 동작원리 by 용호

by ★용호★ 2010. 5. 25.

2010년 5월 24일 월요일



지역변수를 두개를 할당한 이유는 switch문에서 비교를 위한 변수가 하나 필요하기 때문이다.



아래의 부분에서 비교를 위한 공간을 사용한다.







If문은 cmp와 jmp를 반대로 수행한다. 아래의 경우 cmp로 a와 0을 비교하는데 조건이 0보다 크거나 같은 경우이다.
이렇게 되면 if문은 그의 반대인 if(a<0) 이 된다. Else의 경우 loc_401037로 jmp하는 것이다.




여기서 jmp를 했는데 그 안에 비교구문이 또 있다면 else if 가 된다.



 

If문의 body 찾기 위해서 종료되는 지점을 따라가 본다.

Loc_401059 부분에서 종료되므로 윗부분까지가 if문의 바디가 된다.









 

제일 처음 시작되는 if문과 loc_401022 if문은 다른 if문이다.

body 먼저 찾고 분석을 하는 것이 빠르다.







OR연산의 경우 조건이 하나만 맞아도 수행이 되므로 조건이 맞으면 바로 body를 수행한다.
If문은 비교연산이 반대로 수행되는 반면 OR연산은 참일 경우에 바로 Body를 수행하게 된다.





Do~while 문은 처음에 비교구문이 없다가 중간에 비교구문이 들어가고 반복된다.




▶ 코드




댓글