00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
#if REALLY
00030
#define PREFIX_ES 0x00000100
00031
#define PREFIX_CS 0x00000200
00032
#define PREFIX_SS 0x00000400
00033
#define PREFIX_DS 0x00000800
00034
#define PREFIX_FS 0x00001000
00035
#define PREFIX_GS 0x00002000
00036
#define PREFIX_OPER32 0x00004000
00037
#define PREFIX_ADDR32 0x00008000
00038
#define PREFIX_LOCK 0x00010000
00039
#define PREFIX_REPNE 0x00020000
00040
#define PREFIX_REP 0x00040000
00041
#define PREFIX_SEG_ALL 0x00003f00
00042
00043
00044
00045
00046
00047
00048
00049
00050
typedef struct _REGINFO {
00051 ULONG RiSegSs;
00052 ULONG RiEsp;
00053 ULONG RiEFlags;
00054 ULONG RiSegCs;
00055 ULONG RiEip;
00056 PKIA32_FRAME RiTrapFrame;
00057 ULONG RiCsLimit;
00058 ULONG RiCsBase;
00059 ULONG RiSsLimit;
00060 ULONG RiSsBase;
00061 ULONG RiPrefixFlags;
00062
00063
00064
00065
00066 ULONG RiInstLength;
00067 PUCHAR RiLinearAddr;
00068 UCHAR RiOpcode;
00069 KXDESCRIPTOR RiCsDescriptor;
00070 KXDESCRIPTOR RiSsDescriptor;
00071 } REGINFO, *PREGINFO;
00072
00073
#define BOP_OPCODE 0xc4c4
00074
00075
#define DPMISTACK_EXCEPTION_OFFSET 0x1000
00076
00077
00078
00079
00080
#define DPMISTACK_OFFSET (DPMISTACK_EXCEPTION_OFFSET - 0x20)
00081
00082
#ifdef NEEDED
00083
00084
00085
00086
00087
00088
#define STYPE_DATA 0x12
00089
#define STYPE_CODE 0x18
00090
#define STYPE_EXECWRITE_MASK 0x1a
00091
00092
00093
00094
00095
00096
00097
#define UNSCRAM_BASE_OFFSET 0
00098
#define UNSCRAM_BASE_MASK 0x0ffffffff
00099
#define UNSCRAM_GET_BASE(x) ((PUCHAR) ((x) & UNSCRAM_BASE_MASK))
00100
00101
00102
#define UNSCRAM_LIMIT_OFFSET 32
00103
#define UNSCRAM_LIMIT_MASK 0x0fffff
00104
#define UNSCRAM_GET_LIMIT(x) (((x) >> UNSCRAM_LIMIT_OFFSET) & UNSCRAM_LIMIT_MASK)
00105
00106
00107
00108
#define UNSCRAM_STYPE_OFFSET 52
00109
#define UNSCRAM_STYPE_MASK 0x1f
00110
#define UNSCRAM_GET_STYPE(x) (((x) >> UNSCRAM_STYPE_OFFSET) & UNSCRAM_STYPE_MASK)
00111
00112
00113
#define UNSCRAM_DPL_OFFSET 57
00114
#define UNSCRAM_DPL_MASK 0x3
00115
#define UNSCRAM_GET_DPL(x) (((x) >> UNSCRAM_DPL_OFFSET) & UNSCRAM_DPL_MASK)
00116
00117
00118
#define UNSCRAM_PRESENT_OFFSET 59
00119
#define UNSCRAM_PRESENT_MASK 0x1
00120
#define UNSCRAM_GET_PRESENT(x) (((x) >> UNSCRAM_PRESENT_OFFSET) & UNSCRAM_PRESENT_MASK)
00121
00122
00123
#define UNSCRAM_BIG_OFFSET 62
00124
#define UNSCRAM_BIG_MASK 0x1
00125
#define UNSCRAM_GET_BIG(x) (((x) >> UNSCRAM_BIG_OFFSET) & UNSCRAM_BIG_MASK)
00126
00127
00128
#define UNSCRAM_GRAN_OFFSET 63
00129
#define UNSCRAM_GRAN_MASK 0x1
00130
#define UNSCRAM_GET_GRAN(x) (((x) >> UNSCRAM_GRAN_OFFSET) & UNSCRAM_GRAN_MASK)
00131
00132
00133
#define UNSCRAM_FLAGS_OFFSET 52
00134
#define UNSCRAM_FLAGS_MASK 0xfff
00135
#define UNSCRAM_GET_FLAGS(x) (((x) >> UNSCRAM_FLAGS_OFFSET) & UNSCRAM_FLAGS_MASK)
00136
00137
#define UNSCRAM_EXPAND_IS_DOWN(x) ((((x) >> UNSCRAM_STYPE_OFFSET) & 0x1c) == 0x14)
00138
#define UNSCRAM_GRAN_IS_LARGE(x) ((x) & (UNSCRAM_GRAN_MASK << UNSCRAM_GRAN_OFFSET))
00139
#define UNSCRAM_IS_PRESENT(x) ((x) & (UNSCRAM_PRESENT_MASK << UNSCRAM_PRESENT_OFFSET))
00140
#define UNSCRAM_ACCESS_BIG(x) ((x) & (UNSCRAM_BIG_MASK << UNSCRAM_BIG_OFFSET))
00141
00142
#endif // NEEDED
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
#define SANITIZE_FLAGS_IA32(eFlags) (\
00161
((((eFlags) & EFLAGS_V86_MASK) && KeIA32VdmIoplAllowed) ? \
00162
(((eFlags) & KeIA32EFlagsAndMaskV86) | KeIA32EFlagsOrMaskV86) : \
00163
((EFLAGS_INTERRUPT_MASK) | ((eFlags) & EFLAGS_USER_SANITIZE)))
00164
00165
extern ULONG
KeIA32EFlagsAndMaskV86;
00166
extern ULONG
KeIA32EFlagsOrMaskV86;
00167
extern BOOLEAN
KeIA32VdmIoplAllowed;
00168
extern ULONG
KeIA32VirtualIntExtensions;
00169
00170
#define UNSCRAM_LIMIT_OFFSET 32
00171
#endif