Search

64 bit Programming

[- Disclaimer -] 아래 내용은 정보보안 공부 목적으로 작성된 것이나, 이를 토대로 허가되지 않은 대상에 실습을 진행할 경우 해킹 시도로 간주하여 법적 처벌을 받을 수 있음을 알려 드립니다.
32 bit <-> 64 bit 간 차이
✦ CPU의 32/64 bit 지원 여부
✧ 한 번에 송/수신 가능한 Data 크기
→ Bus 선 수에 따라 32/64 bit가 결정 됨
✦ OS의 32/64 bit 지원 여부
✧ 포인터 주소 크기에 따라 32/64 bit가 결정 됨
64 bit Programming의 포인터 자료형 Casting 시 주의점
✦ 포인터 주소 크기가 4 byte에서 8 Byte가 되므로 Casting 할 때 다른 걸로 Casting
#include <stdio.h> int main() { int arr[10] = {0,}; int arrVal = (int)arr; printf("pointer: %d\n", arrVal); return 0; }
Plain Text
복사
pointer: 6487536 -------------------------------- Process exited after 0.08532 seconds with return value 0 계속하려면 아무 키나 누르십시오 . .
Plain Text
복사
#include <stdio.h> int _tmain() { int arr[10] = {0,}; int arrVal = (int)arr; // Syntax Error 발생 printf("pointer: %d\n", arrVal); return 0; }
Plain Text
복사
#include <stdio.h> int wmain() { int arr[10] = {0,}; int arrVal = (int)arr; printf("pointer: %d\n", arrVal); return 0; }
Plain Text
복사
64 bit 기반 Programming Model
✦ Windows
✧ LLP64 Model
✦ UNIX
✧ LP64 Model
Polymorphic 자료형 (=다형성)
✦ A가 B나 C의 특징을 지님
✦ PTR이 들어가서 포인터형으로 오해하지 말자. Polymorphic 자료형은 포인터 형이 아님. PTR이 들어간 이유는 포인터 연산을 활용하기 위한 자료형일 뿐임
#if defined(_WIN64) // _WIN64일 경우 64 bit 처리 typedef __int64 LONG_PTR; typedef unsinged __int64 ULONG_PTR; typedef __int64 typedef unsigned __int64 UINT_PTR; #else // _WIN64가 아닐 경우 32 bit 처리 typedef long LONG_PTR; typedef unsigned long ULONG_PTR; typedef int INT_PTR; typedef unsigned int UINT_PTR; #endif
Plain Text
복사
주소 값의 차를 출력하는 프로그램
✦ UINT
✧ 32 bit 지원
✦ UINT_PTR
✧ 32/64 bit 동시 지원
#include <windows.h> #include <tchar.h> UINT CallDistance(UINT a, UINT b) { return a - b; } int _tmain() { INT val1 = 10; INT val2 = 20; _tprintf(_T("Position %d, %d \n"), (UINT)&val1, (UINT)&val2); CallDistance((UINT)&val1, (UINT)&val2); return 0; } #if defined(_WIN64) typedef unsigned __int64 UINT_PTR; #else typedef unsigned int UINT_PTR; #endif
Plain Text
복사
Position 6487580, 6487576 -------------------------------- Process exited after 0.07511 seconds with return value 0 계속하려면 아무 키나 누르십시오 . . .
Plain Text
복사