C300_036
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 | #include <stdio.h> main() { int saram_A = 0; int saram_B = 0; int* pointer; int* psaram; pointer = &saram_A; *pointer = 1; printf("%d, %d \n", saram_A, *pointer); // 1, 1 psaram = &saram_A; *psaram = 2; printf("%d, %d, %d \n", saram_A, *pointer, *psaram); // 2, 2, 2 pointer = &saram_B; *pointer = 3; printf("%d, %d, %d \n", saram_A, saram_B, *pointer); // 2, 3, 3 psaram = &saram_B; *psaram = 4; printf("%d, %d, %d, %d\n", saram_A, saram_B, *pointer, *psaram); // 2, 4, 4, 4 } | cs |
IDA - Layout Graph
IDA - Text View
psaram 과 pointer에는 이름으로 미루어보아 포인터로 사용됨을 유추해 볼 수도 있지만,
lea를 통해 다른 변수의 주소를 받고 이 주소를 이용해 값에 접근하는것을 보고 포인터임을 알 수 있다.
[ ] 를 통해 주소에 대한 값에 접근할 수 있다.
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | #include <stdio.h> main() { int *pointer; int saram_A; int *psram; int saram_B; saram_A=0; saram_B=0; eax = &saram_A; pointer = eax; ecx = pointer; [ecx] = 1; edx = pointer; eax = [edx]; ecx = saram_A; printf(_Format, ecx, eax); // 1, 1 edx = &saram_A; psaram = edx; eax = psaram; [eax] = 2; ecx = psaram; edx = [ecx]; eax = pointer; ecx = [eax]; edx = [saram_A]; printf(aDDDD, edx, ecx, edx); // 2, 2, 2 eax = &saram_B; pointer = eax; ecx = pointer; [ecx] = 3; edx = pointer; eax = [edx]; ecx = saram_B; edx = saram_A; printf(aDDD_0, edx, ecx, eax); // 2, 3, 3 eax = &saram_B; psaram = eax; ecx = psaram; [ecx] = 4; edx = psaram; eax = [edx]; ecx = pointer; edx = [ecx]; eax = [saram_B]; ecx = [saram_A]; pirntf(ecx, eax, edx, eax); // 2, 4, 4, 4 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 26 27 28 29 30 | #include <stdio.h> main() { int *pointer; int saram_A; int *psram; int saram_B; saram_A=0; saram_B=0; pointer= &saram_A; *pointer = 1 printf(_Format, saram_A, *pointer); // 1, 1 psaram = &saram_A; *psaram = 2 printf(aDDDD, saram_A, *pointer, *psaram); // 2, 2, 2 pointer = &saram_B; *pointer = 3; printf(aDDD_0, saram_A, saram_B, *pointer); // 2, 3, 3 psaram = &saram_B; *psaram = 4; pirntf(saram_A, saram_B, *pointer, *psaram); // 2, 4, 4, 4 return 0; } | cs |
'Reversing > ASM to C' 카테고리의 다른 글
ASM to C with IDA - 038 (0) | 2018.07.06 |
---|---|
ASM to C with IDA - 037 (0) | 2018.07.05 |
ASM to C with IDA - 035 (0) | 2018.07.05 |
ASM to C with IDA - 034 (0) | 2018.07.04 |
ASM to C with IDA - 033 (0) | 2018.07.04 |