if:
==일 때, cmp로 비교.
JNZ로 거짓일 때 점프.
!=일 때, cmp로 비교.
JE로 거짓일 때 점프.
부호 있을 때:
>일 때, cmp로 비교.
JLE로 거짓일 때 점프.
<일 때, cmp로 비교.
JGE로 거짓일 때 점프.
>=일 때, cmp로 비교.
JL로 거짓일 때 점프.
<=일 때, cmp로 비교.
JG로 거짓일 때 점프.
부호 없을 때:
>일 때, cmp로 비교.
JBE로 거짓일 때 점프.
<일 때, cmp로 비교.
JAE로 거짓일 때 점프.
>=일 때, cmp로 비교.
JB로 거짓일 때 점프.
<=일 때, cmp로 비교.
JA로 거짓일 때 점프.
if - else:
if가 참일 때, if 종속 명령을 실행하고 jmp로 else 부분을 뛰어 넘음.
else일 때, else로 바로 점프.
if - else if - else:
if가 참일 때, if 종속 명령을 실행하고, jmp로 else if, else 부분을 뛰어 넘음.
if가 거짓일 때, else if의 cmp 명령으로 점프. 참이면 종속 명령 실행 후 jmp로 else 부분을 뛰어 넘음.
마지막 else if가 거짓일 때, else로 점프.
switch - case:
종속 명령이 비교문 바로 아래에 있지 않고, 비교를 먼저 한 후에 조건이 맞으면 밑에 있는 종속 명령으로 점프.
조건에 맞지 않으면 jmp로 switch - case문을 뛰어 넘음.
break가 있으면 각 조건의 종속 명령들 아래에 switch - case문을 뛰어 넘는 jmp 명령이 있음.
default가 있으면 비교의 조건이 맞지 않을 때, jmp 명령이 switch - case문을 뛰어 넘지 않고, default 종속 명령으로 점프함.
'Reversing&Write up > Study' 카테고리의 다른 글
[HandRay] while문, for문 패턴, WinMain API? (0) | 2018.01.15 |
---|---|
[HandRay] 함수 호출 패턴, 구조체 패턴, 코드 패치 (0) | 2018.01.13 |
[HandRay] Main 함수 parameter, pointer 패턴 (0) | 2018.01.12 |
[HandRay] OllyDbg 사용법과 Data Expression (0) | 2018.01.11 |
[HandRay] 핸드레이와 레지스터 (0) | 2018.01.09 |