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