| [589] | 1 | /* | 
|---|
|  | 2 |  | 
|---|
|  | 3 | This file contains definitions used by the Hex-Rays decompiler output. | 
|---|
|  | 4 | It has type definitions and convenience macros to make the | 
|---|
|  | 5 | output more readable. | 
|---|
|  | 6 |  | 
|---|
|  | 7 | Copyright (c) 2007 Hex-Rays sprl | 
|---|
|  | 8 |  | 
|---|
|  | 9 | */ | 
|---|
|  | 10 |  | 
|---|
|  | 11 | #if defined(__GNUC__) | 
|---|
|  | 12 | #define FMT_64 "ll" | 
|---|
|  | 13 | typedef          long long ll; | 
|---|
|  | 14 | typedef unsigned long long ull; | 
|---|
|  | 15 | #elif defined(_MSC_VER) | 
|---|
|  | 16 | typedef          __int64 ll; | 
|---|
|  | 17 | typedef unsigned __int64 ull; | 
|---|
|  | 18 | #define FMT_64 "I64" | 
|---|
|  | 19 | #elif defined (__BORLANDC__) | 
|---|
|  | 20 | typedef          __int64 ll; | 
|---|
|  | 21 | typedef unsigned __int64 ull; | 
|---|
|  | 22 | #define FMT_64 "L" | 
|---|
|  | 23 | #else | 
|---|
|  | 24 | #error "unknown compiler" | 
|---|
|  | 25 | #endif | 
|---|
|  | 26 | typedef unsigned int uint; | 
|---|
|  | 27 | typedef unsigned char uchar; | 
|---|
|  | 28 | typedef unsigned short ushort; | 
|---|
|  | 29 | typedef unsigned long ulong; | 
|---|
|  | 30 |  | 
|---|
|  | 31 | // Partially defined types: | 
|---|
|  | 32 | #define _BYTE  char | 
|---|
|  | 33 | #define _WORD  short | 
|---|
|  | 34 | #define _DWORD long | 
|---|
|  | 35 | #define _QWORD ll | 
|---|
|  | 36 | #define _LONGLONG __int128 | 
|---|
|  | 37 |  | 
|---|
|  | 38 | #ifndef _WINDOWS_ | 
|---|
|  | 39 | typedef char BYTE; | 
|---|
|  | 40 | typedef short WORD; | 
|---|
|  | 41 | typedef long DWORD; | 
|---|
|  | 42 | typedef long LONG; | 
|---|
|  | 43 | #endif | 
|---|
|  | 44 | typedef ll QWORD; | 
|---|
|  | 45 | #ifndef __cplusplus | 
|---|
|  | 46 | //typedef int bool;       // we want to use bool in our C programs | 
|---|
|  | 47 | #endif | 
|---|
|  | 48 |  | 
|---|
|  | 49 | // Some convenience macros to make partial accesses nicer | 
|---|
|  | 50 | // first unsigned macros: | 
|---|
|  | 51 | #define LOBYTE(x)   (*((_BYTE*)&(x)))   // low byte | 
|---|
|  | 52 | #define LOWORD(x)   (*((_WORD*)&(x)))   // low word | 
|---|
|  | 53 | #define LODWORD(x)  (*((_DWORD*)&(x)))  // low dword | 
|---|
|  | 54 | #define HIBYTE(x)   (*((_BYTE*)&(x)+1)) | 
|---|
|  | 55 | #define HIWORD(x)   (*((_WORD*)&(x)+1)) | 
|---|
|  | 56 | #define HIDWORD(x)  (*((_DWORD*)&(x)+1)) | 
|---|
|  | 57 | #define BYTEn(x, n)   (*((_BYTE*)&(x)+n)) | 
|---|
|  | 58 | #define WORDn(x, n)   (*((_WORD*)&(x)+n)) | 
|---|
|  | 59 | #define BYTE1(x)   BYTEn(x,  1)         // byte 1 (counting from 0) | 
|---|
|  | 60 | #define BYTE2(x)   BYTEn(x,  2) | 
|---|
|  | 61 | #define BYTE3(x)   BYTEn(x,  3) | 
|---|
|  | 62 | #define BYTE4(x)   BYTEn(x,  4) | 
|---|
|  | 63 | #define BYTE5(x)   BYTEn(x,  5) | 
|---|
|  | 64 | #define BYTE6(x)   BYTEn(x,  6) | 
|---|
|  | 65 | #define BYTE7(x)   BYTEn(x,  7) | 
|---|
|  | 66 | #define BYTE8(x)   BYTEn(x,  8) | 
|---|
|  | 67 | #define BYTE9(x)   BYTEn(x,  9) | 
|---|
|  | 68 | #define BYTE10(x)  BYTEn(x, 10) | 
|---|
|  | 69 | #define BYTE11(x)  BYTEn(x, 11) | 
|---|
|  | 70 | #define BYTE12(x)  BYTEn(x, 12) | 
|---|
|  | 71 | #define BYTE13(x)  BYTEn(x, 13) | 
|---|
|  | 72 | #define BYTE14(x)  BYTEn(x, 14) | 
|---|
|  | 73 | #define BYTE15(x)  BYTEn(x, 15) | 
|---|
|  | 74 | #define WORD1(x)   WORDn(x,  1) | 
|---|
|  | 75 | #define WORD2(x)   WORDn(x,  2)         // third word of the object, unsigned | 
|---|
|  | 76 | #define WORD3(x)   WORDn(x,  3) | 
|---|
|  | 77 | #define WORD4(x)   WORDn(x,  4) | 
|---|
|  | 78 | #define WORD5(x)   WORDn(x,  5) | 
|---|
|  | 79 | #define WORD6(x)   WORDn(x,  6) | 
|---|
|  | 80 | #define WORD7(x)   WORDn(x,  7) | 
|---|
|  | 81 |  | 
|---|
|  | 82 | // now signed macros (the same but with sign extension) | 
|---|
|  | 83 | #define SLOBYTE(x)   (*((char*)&(x))) | 
|---|
|  | 84 | #define SLOWORD(x)   (*((short*)&(x))) | 
|---|
|  | 85 | #define SLODWORD(x)  (*((long*)&(x))) | 
|---|
|  | 86 | #define SHIBYTE(x)   (*((char*)&(x)+1)) | 
|---|
|  | 87 | #define SHIWORD(x)   (*((short*)&(x)+1)) | 
|---|
|  | 88 | #define SHIDWORD(x)  (*((long*)&(x)+1)) | 
|---|
|  | 89 | #define SBYTEn(x, n)   (*((char*)&(x)+n)) | 
|---|
|  | 90 | #define SWORDn(x, n)   (*((short*)&(x)+n)) | 
|---|
|  | 91 | #define SBYTE1(x)   SBYTEn(x,  1) | 
|---|
|  | 92 | #define SBYTE2(x)   SBYTEn(x,  2) | 
|---|
|  | 93 | #define SBYTE3(x)   SBYTEn(x,  3) | 
|---|
|  | 94 | #define SBYTE4(x)   SBYTEn(x,  4) | 
|---|
|  | 95 | #define SBYTE5(x)   SBYTEn(x,  5) | 
|---|
|  | 96 | #define SBYTE6(x)   SBYTEn(x,  6) | 
|---|
|  | 97 | #define SBYTE7(x)   SBYTEn(x,  7) | 
|---|
|  | 98 | #define SBYTE8(x)   SBYTEn(x,  8) | 
|---|
|  | 99 | #define SBYTE9(x)   SBYTEn(x,  9) | 
|---|
|  | 100 | #define SBYTE10(x)  SBYTEn(x, 10) | 
|---|
|  | 101 | #define SBYTE11(x)  SBYTEn(x, 11) | 
|---|
|  | 102 | #define SBYTE12(x)  SBYTEn(x, 12) | 
|---|
|  | 103 | #define SBYTE13(x)  SBYTEn(x, 13) | 
|---|
|  | 104 | #define SBYTE14(x)  SBYTEn(x, 14) | 
|---|
|  | 105 | #define SBYTE15(x)  SBYTEn(x, 15) | 
|---|
|  | 106 | #define SWORD1(x)   SWORDn(x,  1) | 
|---|
|  | 107 | #define SWORD2(x)   SWORDn(x,  2) | 
|---|
|  | 108 | #define SWORD3(x)   SWORDn(x,  3) | 
|---|
|  | 109 | #define SWORD4(x)   SWORDn(x,  4) | 
|---|
|  | 110 | #define SWORD5(x)   SWORDn(x,  5) | 
|---|
|  | 111 | #define SWORD6(x)   SWORDn(x,  6) | 
|---|
|  | 112 | #define SWORD7(x)   SWORDn(x,  7) | 
|---|
|  | 113 |  | 
|---|
|  | 114 | // Macros to represent some assembly instructions | 
|---|
|  | 115 | // Feel free to modify them | 
|---|
|  | 116 |  | 
|---|
|  | 117 | #define __ROL__(x, y) __rotl__(x, y)       // Rotate left | 
|---|
|  | 118 | #define __ROR__(x, y) __rotr__(x, y)       // Rotate right | 
|---|
|  | 119 | #define __RCL__(x, y) invalid_operation    // Rotate left thru carry | 
|---|
|  | 120 | #define __RCR__(x, y) invalid_operation    // Rotate right thru carry | 
|---|
|  | 121 | #define __MKCADD__(x, y) invalid_operation // Generate carry flag for an addition | 
|---|
|  | 122 | #define __MKOADD__(x, y) invalid_operation // Generate overflow flag for an addition | 
|---|
|  | 123 | #define __MKCSHL__(x, y) invalid_operation // Generate carry flag for a shift left | 
|---|
|  | 124 | #define __MKCSHR__(x, y) invalid_operation // Generate carry flag for a shift right | 
|---|
|  | 125 | #define __MKCRCL__(x, y) invalid_operation // Generate carry flag for a RCL | 
|---|
|  | 126 | #define __MKCRCR__(x, y) invalid_operation // Generate carry flag for a RCR | 
|---|
|  | 127 | #define __SETO__(x, y)   invalid_operation // Generate overflow flags for (x-y) | 
|---|
|  | 128 |  | 
|---|
|  | 129 |  | 
|---|
|  | 130 | // In the decompilation listing there are some objects declarared as _UNKNOWN | 
|---|
|  | 131 | // because we could not determine their types. Since the C compiler does not | 
|---|
|  | 132 | // accept void item declarations, we replace them by anything of our choice, | 
|---|
|  | 133 | // for example a char: | 
|---|
|  | 134 |  | 
|---|
|  | 135 | #define _UNKNOWN char | 
|---|
|  | 136 |  | 
|---|
|  | 137 | #ifdef _MSC_VER | 
|---|
|  | 138 | #define snprintf _snprintf | 
|---|
|  | 139 | #define vsnprintf _vsnprintf | 
|---|
|  | 140 | #endif | 
|---|