PC리버싱/기타

윈도우의 자료형 정리

Lamed_Dhhd 2020. 5. 22. 23:30
반응형

PDF 문서 다운로드 링크

 

윈도우의 자료형 정리.pdf
0.10MB

 

 

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")

반응형