C300_004
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #include <stdio.h> main() { int x; int y; x = 10; y = x - 5; if (x > y) { printf("x의 값이 y보다 큽니다."); } else { printf("x의 값이 y보다 작습니다."); } } | cs |
IDA - Layout Graph
IDA - Tex View
IDA의 Layout Graph는 Graph 처럼 소스가 어느 방향으로 흘러가는지 보여준다.
원본 소스에는 if라는 분기문이 있는데, if 분기문을 Layout Graph에서 두가지 길로 보여준다.
초록선은 if가 True일 때 실행되는 코드이고 빨간선은 if가 False일 때 실행되는 코드이다.
cmp는 내부적으로 빼는 작업을 하여 zf를 설정해준다.
두 operand를 빼 0이면 zf=1가 설정되고 0이 아니면 zf=0으로 설정된다.
jle(jump less or equals) : 첫 번째 파라미터가 두번째 파라미터보다 작거나 같으면 jump한다.
IDA에서 _Format, asc_403038의 string을 알기위해 앞서 설명한것과 같이 찾아가보면 해당 문자열을 찾을 수 있다.
위 정보를 가지고 아래와 같이 의사코드를 작성할 수 있다.
pseudo code - 의사코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #include <stdio.h> main() { x = 10; eax = x; eax = eax - 5; y = eax ecx = x if(ecx <= y) printf(asc_40308); else printf(_Format); eax = 0; } | cs |
pseudo code - 최종의사코드
1 2 3 4 5 6 7 8 9 10 11 12 | #include <stdio.h> main() { x = 10; y = 5; if( x <= y) printf("x의 값이 y의 값보다 작다"); else printf("x의 값이 y의 값보다 작"); } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 006 (0) | 2018.05.25 |
---|---|
ASM to C with IDA - 005 (0) | 2018.05.25 |
ASM to C with IDA - 003 (0) | 2018.05.24 |
ASM to C with IDA - 002 (0) | 2018.05.24 |
ASM to C with IDA - 001 (0) | 2018.05.24 |