C300_006
C300_소스코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | #include <stdio.h> int hapf(int value); main() { printf("1부터 10까지의 합은 %d \n", hapf(10)); printf("1부터 100까지의 합은 %d \n", hapf(100)); printf("1부터 1000까지의 합은 %d \n", hapf(1000)); } int hapf(int value) { int i; int hap = 0; for (i = 1; i <= value; i = i + 1) { hap = hap + i; } return hap; } | cs |
IDA - Layout Graph
IDA - Text View
우선 처음 Layout Graph, Text View를 보면 함수가 쓰였다는 느낌을 직관적으로 느껴지지 않을 수도 있다.
하지만 call _hapf 를 집중해서 보자. call이란 것은 어떤 것(함수)을 호출한다는 뜻이다.
즉, _hapf 라는 것(함수)을 호출한다. 그렇다면 함수 내용은 어디에 표현되어 있을까?
그것은 우선 main 함수를 뜯어 본 후 천천히 찾아보자.
pseudo code main - 의사코드
1 2 3 4 5 6 7 8 9 10 11 12 13 | #include <stdio.h> main() { _hapf(10); printf(_Format, eax); _hapf(100); printf(a1, eax); _hapf(1000); printf(a1_0, eax); } | cs |
main 함수는 작성되었으니 이제 _hapf 함수를 찾아가보자.
_hapf에 마우스를 가져다 대고 double click을 하면 _hapf 함수로 들어갈 수 있다.
_hapf 함수가 IDA로 보여지는 상태를 보자.
IDA - Layout Graph(_hapf)
IDA - Text View(_hapf)
Layout Graph를 보면 <005>에서 보았던 비슷한 형식으로 반복된다는 것을 이제 한눈에 알아차릴 수 있다.
또한 일반적으로 eax는 함수가 끝나고 return 값이 저장되는 register이므로 알아두는것이 좋다.
여기서 알아두면 좋을것은 _cdecl이다.
_cdecl은 호출 규약으로서, _cdecl, _fastcall, _thiscall, _stdcall 이렇게 일반적으로 4개가 존재한다.
나머지 호출규약은 나올때마다 설명하고 우선 _cdecl부터 알아보자.
_cdecl은 함수를 호출한 곳에서 (함수 밖에서) 사용된 stack을 정리한다.
즉, main을 보면 call _hapf를 할 때마다 add esp, 4를 하는데 이것이 main(함수를 호출한 곳)에서 stack을 정리하는 것이다.
각 string을 보는 방법은 누차 설명했으므로 이제부터 생략한다.
pseudo code _hapf - 의사코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> int hapf(value) { int hap = 0; int i=1; for(i=1; i<value; i++) { hap = hap + i; } return hap; } | cs |
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 | #include <stdio.h> int hapf(value) { int hap = 0; int i=1; for(i=1; i<value; i++) { hap = hap + i; } return hap; } main() { _hapf(10); printf(_Format, eax); _hapf(100); printf(a1, eax); _hapf(1000); printf(a1_0, eax); } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
| ASM to C with IDA - 008 (0) | 2018.05.26 |
|---|---|
| ASM to C with IDA - 007 (0) | 2018.05.25 |
| ASM to C with IDA - 005 (0) | 2018.05.25 |
| ASM to C with IDA - 004 (1) | 2018.05.25 |
| ASM to C with IDA - 003 (0) | 2018.05.24 |