C300_047
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 25 26 27 | #include <stdio.h> #include <conio.h> int print(char *string); void main(void) { print("This is a putch function !"); } int print(char *string) { int len = 0; while (*string != (int)NULL) { putch(*string); string++; len++; } // 현재 출력되고 있는 줄을 다음 줄의 첫 번째로 이동 putch('\r'); // Carriage Return putch('\n'); // Line Feed return len; } | cs |
IDA - Layout Graph
IDA - Text View
movsx: 부호있는 산술값에 사용기 때문에 피연산자의 왼쪽 비트를 부호비트로 채운다..
바이트나 워드를 목적지에 전송한다.
string = dword ptr 8을 통해 string이 print 함수의 parameter라는 것을 알 수 있다.
또한 movsx를 통해 byte 단위를 옮기므로 char type인것을 확인했다.
eax 는 return 값을 전달하기 위해 사용하는 레지스터이다.
print 함수를 종료하기 전에 len을 eax에 저장하므로 int return을 한다는 것을 알 수 있다.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 | #include <stdio.h> #include <conio.h> int print(char *string) { len = 0; eax = string; ecx = [eax]; while(ecx != NULL) { edx = string; eax = [edx]; putch(eax); ecx = string; ecx = ecx + 1; string = ecx; edx = len; edx = edx + 1; len = edx; eax = string; ecx = [eax]; } putch('\r'); putch('\n'); eax = len; } void main(void) { print(string); eax = 0; } | 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> #include <conio.h> int print(char *string) { len = 0; while(*string != NULL) { putch(*string); string++; len++; } putch('\r'); putch('\n'); return len; } void main(void) { print(string); } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 049 (0) | 2018.07.10 |
---|---|
ASM to C with IDA - 048 (0) | 2018.07.10 |
ASM to C with IDA - 046 (0) | 2018.07.09 |
ASM to C with IDA - 045 (0) | 2018.07.09 |
ASM to C with IDA - 044 (0) | 2018.07.09 |