PDF 문서 다운로드 링크
0. 개요
1. void 계열
2. 정수 계열
3. 부동 소수점 계열
4. 기타
5. 정리
0. 개요
B를 A로
typedef B A
#define A B
윈도우는 32비트는 ILP32, 64비트는 LLP64
리눅스는 32비트는 ILP32, 64비트는 LP64
즉, 윈도우의 경우 32비트와 64비트의 차이는 포인터 뿐이다.
ILP32 LLP64 LP64
char 8 8 8
short 16 16 16
int 32 32 32
long 32 32 64
long long 64 64 64
pointer 32 64 64
_WIN64 , not _WIN64
UNICODE , not UNICODE
_M_IX86 , not _M_IX86
1. void 계열
1.1 void
--
void -> VOID
void * -> LPVOID, PVOID
PVOID -> HANDLE
HANDLE -> HINSTANCE, HKEY 등의 핸들
HKEY * -> PHKEY
HINSTANCE -> HMODULE
HICON -> HCURSOR
LPVOID -> SC_LOCK
CONST void * -> LPCVOID
2. 정수 계열
2.1 [ true, false ]
1바이트 : bool
--
bool : x
2.2 [ -128 ~ 127 ]
1바이트 : __int8, char, signed char
--
__int8 : x
char -> CHAR, CCHAR
CHAR * -> LPSTR, PCHAR, PSTR
LPSTR -> PTSTR, LPTSTR
CONST CHAR * -> PCSTR
char -> TCHAR
TCHAR * -> PTCHAR
__nullterminated CONST CHAR * -> LPCSTR
LPCSTR -> PCTSTR, LPCTSTR
signed char -> INT8
INT8 * -> PINT8
2.3 [ 0 ~ 255 ]
1바이트 : unsigned __int8, unsigned char
--
unsigned char -> BYTE, UCHAR, UINT8
BYTE -> BOOLEAN
BOOLEAN * -> PBOOLEAN
BYTE * -> PBYTE
BYTE far * -> LPBYTE
UCHAR * -> PUCHAR
UINT8 * -> PUINT8
unsigned char -> TBYTE
TBYTE * -> PTBYTE
2.4 [ –32,768 ~ 32,767 ]
2바이트 : __int16, short, short int, signed short int
--
short -> SHORT
SHORT * -> PSHORT
short -> HALF_PTR
HALF_PTR * -> PHALF_PTR
signed short -> INT16
INT16 * -> PINT16
2.5 [ 0 ~ 65,535 ]
2바이트 : unsigned __int16, unsigned short, unsigned short int
--
unsigned short -> UINT16, USHORT, WORD
UINT16 * -> PUINT16
USHORT * -> PUSHORT
WORD -> ATOM, LANGID
WORD * -> LPWORD, PWORD
unsigned short -> UHALF_PTR
UHALF_PTR * -> PUHALF_PTR
2바이트 : wchar_t, __wchar_t [0 ~ 65,535]
--
wchar_t -> WCHAR
WCHAR -> TBYTE, TCHAR
TBYTE * -> PTBYTE
TCHAR * -> PTCHAR
WCHAR * -> LPWSTR, PWCHAR, PWSTR
LPWSTR -> PTSTR, LPTSTR
CONST WCHAR * -> LPCWSTR, PCWSTR
LPCWSTR -> PCTSTR, LPCTSTR
2.6 [ –2,147,483,648 ~ 2,147,483,647 ]
4바이트 : __int32, int, signed int, long, long int, signed long int
--
int -> BOOL, HFILE, INT
BOOL * -> PBOOL
BOOL far * -> LPBOOL
int -> INT_PTR
INT_PTR * -> PINT_PTR
int -> HALF_PTR
HALF_PTR * -> PHALF_PTR
int * -> LPINT, PINT
signed int -> INT32, LONG32
INT32 * -> PINT32
LONG32 * -> PLONG32
long -> LONG -> HRESULT
LONG * -> PLONG
long -> LONG_PTR -> SSIZE_T, LPARAM, LRESULT
SSIZE_T * -> PSSIZE_T
LONG_PTR * -> PLONG_PTR
long * -> LPLONG
2.7 [ 0 ~ 4,294,967,295 ]
4바이트 : unsigned __int32, unsigned int, unsigned int, unsigned long, unsigned long int
--
unsigned int -> DWORD32, UINT, UINT32, ULONG32
DWORD32 * -> PDWORD32
UINT * -> PUINT
UINT32 * -> PUINT32
ULONG32 * -> PULONG32
unsigned int -> UINT_PTR -> WPARAM
UINT_PTR * -> PUINT_PTR
unsigned int -> UHALF_PTR
UHALF_PTR * -> PUHALF_PTR
unsigned long -> DWORD, ULONG
DWORD -> COLORREF, LCID, LCTYPE, LGRPID
DWORD * -> LPCOLORREF, LPDWORD, PDWORD
PDWORD -> PLCID
ULONG * -> PULONG
unsigned long -> ULONG_PTR -> SIZE_T, DWORD_PTR
SIZE_T * -> PSIZE_T
DWORD_PTR * -> PDWORD_PTR
ULONG_PTR * -> PULONG_PTR
2.8 [ –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 ]
8바이트 : __int64, long long, signed long long
--
__int64 -> LONG64
LONG64 * : PLONG64
__int64 -> LONG_PTR, INT_PTR
LONG_PTR -> SSIZE_T, LPARAM, LRESULT
SSIZE_T * -> PSSIZE_T
LONG_PTR * -> PLONG_PTR
INT_PTR * -> PINT_PTR
__int64 -> LONGLONG -> USN
LONGLONG * -> PLONGLONG
signed __int64 -> INT64
INT64 * -> PINT64
2.9 [ 0 ~ 18,446,744,073,709,551,615 ]
8바이트 : unsigned __int64, unsigned long long, long long, unsigned long long
--
unsigned __int64 -> DWORD64, DWORDLONG, QWORD, ULONG64, UINT64
DWORDLONG * -> PDWORDLONG
ULONG64 * -> PULONG64
DWORD64 * -> PDWORD64
UINT64 * -> PUINT64
unsigned __int64 -> ULONG_PTR, UINT_PTR
ULONG_PTR -> SIZE_T, DWORD_PTR
SIZE_T * -> PSIZE_T
DWORD_PTR * -> PDWORD_PTR
ULONG_PTR * PULONG_PTR
UINT_PTR -> WPARAM
UINT_PTR * -> PUINT_PTR
unsigned __int64 -> ULONGLONG
ULONGLONG * -> PULONGLONG
3. 부동 소수점 계열
3.1 4바이트 float
--
float -> FLOAT
FLOAT * -> PFLOAT
3.2 8바이트 double, long double
--
double -> LONGLONG, ULONGLONG
LONGLONG -> USN
LONGLONG * -> PLONGLONG
ULONGLONG * -> PULONGLONG
4. 기타
__stdcall -> CALLBACK, WINAPI
WINAPI -> APIENTRY
const -> CONST
__sptr -> POINTER_SIGNED
__uptr -> POINTER_UNSIGNED
if(WINVER >= 0x0500) HANDLE -> HMONITOR
__ptr32 : 32비트 시스템의 네이티브 포인터
__ptr64 : 64비트 시스템의 네이티브 포인터
__sptr
__uptr
typedef struct _UNICODE_STRING {
USHORT Length;
USHORT MaximumLength;
PWSTR Buffer;
} UNICODE_STRING;
UNICODE_STRING * -> PUNICODE_STRING;
const UNICODE_STRING * -> PCUNICODE_STRING;
#if defined(_WIN64)
#define POINTER_32 __ptr32
#else
#define POINTER_32
#endif
#if (_MSC_VER >= 1300)
#define POINTER_64 __ptr64
#else
#define POINTER_64
#endif
5. 정리
5.1 WIN64
HALF_PTR(PHALF_PTR) - short
- int
UHALF_PTR(PUHALF_PTR) - unsigned short
- unsigned int
INT_PTR(PINT_PTR) - int
- __int64
WPARAM - UINT_PTR(PUINT_PTR) - unsigned int
- unsigned __int64
SSIZE_T(PSSIZE_T), LPARAM, LRESULT - LONG_PTR(PLONG_PTR) - long
- __int64
SIZE_T(PSIZE_T), DWORD_PTR(PDWORD_PTR) - ULONG_PTR(PULONG_PTR)
- unsigned long
- unsigned __int64
5.2 유니코드
PTSTR, LPTSTR - LPSTR - CHAR * - char *
- LPWSTR - WCHAR * - wchar_t *
PCTSTR, LPCTSTR - LPCSTR - __nullterminated CONST CHAR * - const char *
- LPCWSTR - CONST WCHAR * - const wchar_t *
PTCHAR - TCHAR * - char *
- WCHAR * - wchar_t
PTBYTE - TBYTE * - unsigned char *
- WCHAR * - wchar_t *
5.3 _M_IX86
USN - LONGLONG(PLONGLONG) - __int64
- double
ULONGLONG(PULONGLONG) - unsigned __int64
- double
참고]
1. void *
void형 포인터는 어떠한 변수의 주소 값이든지 담을 수 있으며 햠수의 주소 값도 담을 수 있다. 윈도우에서는 PVOID, HANDLE 등에 사용된다.
void far *
32비트에서는 far가 의미가 없다. 윈도우에서는 LPVOID라고 불리며 PVOID와 같이 "void *"라고 생각하면 된다.
2. const
const int * p = &a
p는 상수만을 가리키는 정수형 포인터. p는 정수 중에서 상수만을 가리키게 되므로 *p = 20 같이 대상(상수)의 값을 변경할 수 없고 단지 주소만을 가리킬 수 있다. 즉 가리키는 값이 상수이다. 그리고 대상이 상수라서 그 값을 변경할 수 없다. 대신 이 포인터는 p = &b 같이 다른 즉 다른 상수는 가리킬 수 있다.
int * const p = &a
p는 정수형 변수를 가리키는 포인터 상수. 그래서 p = &b 같이 다른 값을 가리킬 수 없다. 이미 b를 가리키고 있기 때문. 즉 p가 상수이다.
3. 통합형
문자열상수
Ansi : "string"
Unicode : L"string"
통합형 : Window API => TEXT("string"), MFC => _T("string")
'PC리버싱 > 기타' 카테고리의 다른 글
옛날 보다 현재가 리버싱이 더어려운이유들 (0) | 2020.05.28 |
---|---|
실행파일 보호기법들 (0) | 2020.05.28 |
visual studio 보안해제하기 (0) | 2020.05.21 |
리버싱 블로그 추천 (0) | 2020.05.18 |
Visual studio 2019으로만들걸 리버싱하기 (0) | 2020.05.16 |