C300_022
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include <stdio.h> main() { int x = 5; int y = 2; if (x > 0 && x < 10) { printf("0 > x < 10 \n"); } if (x < 0 || y == 2) { printf("x가 0보다 작거나, y는 2입니다. \n"); } if (!(x>y)) { printf("x가 y보다 크지 않습니다. \n"); } } | cs |
IDA - Layout Graph
IDA - Text View
jnz(jump not zero) : 결과 값이 0이 아니거나, 같지 않을 때 점프 (ZF=0)
jle(zump less or equal) : 결과 값이 같거나 작을 때 점프 (ZF=1, or SF != OF)
jge(jump greater or equal) : 결과 값이 같거나 클 때 점프 (ZF =1, or SF == OF)
jl(jump less) : 결과 값이 작을 때 점프 (ZF=1);
jg(jump greater) : 결과 값이 클 때 점프 (ZF=1);
IDA에서 나오는 조건을 보면(cmp), 사용자가 실제 소스에서 사용한 조건과 정확히 반대되는 조건으로 사용한다.
반대되는 조건이 나오기 때문에 해석할 때 역으로 생각하면 쉽다.
pseudo code - 의사 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | #include <stdio.h> main() { int x; int y; x = 5; y = 2; if(x <= 0) else if(x >= 10) else printf(_Format); if (x < 0 ) printf(asc_403030); else if(y!=2) else printf(asc_403030); eax = x; if(eax > y) else printf(asc_403054); eax = 0; } | cs |
pseudo code - 최종 의사 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> main() { int x; int y; x = 5; y = 2; if(x > 0 && x < 10) printf(_Format); if (x >= 0 || y ==2) printf(asc_403030); if(!(x > y)) } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 024 (0) | 2018.05.31 |
---|---|
ASM to C with IDA - 023 (0) | 2018.05.31 |
ASM to C with IDA - 021 (0) | 2018.05.30 |
ASM to C with IDA - 020 (0) | 2018.05.30 |
ASM to C with IDA - 019 (0) | 2018.05.29 |