Bitdefender Hypervisor Memory Introspection
processor.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2020 Bitdefender
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 #ifndef _PROCESSOR_H_
6 #define _PROCESSOR_H_
7 
8 #include "introdefs.h"
9 
10 
11 #define CPU_EFLAGS_CF BIT(0)
12 #define CPU_EFLAGS_FIXED BIT(1)
13 #define CPU_EFLAGS_PF BIT(2)
14 #define CPU_EFLAGS_AF BIT(4)
15 #define CPU_EFLAGS_ZF BIT(6)
16 #define CPU_EFLAGS_SF BIT(7)
17 #define CPU_EFLAGS_TF BIT(8)
18 #define CPU_EFLAGS_IF BIT(9)
19 #define CPU_EFLAGS_DF BIT(10)
20 #define CPU_EFLAGS_OF BIT(11)
21 #define CPU_EFLAGS_NT BIT(14)
22 #define CPU_EFLAGS_RF BIT(16)
23 #define CPU_EFLAGS_VM BIT(17)
24 #define CPU_EFLAGS_AC BIT(18)
25 #define CPU_EFLAGS_VIF BIT(19)
26 #define CPU_EFLAGS_VIP BIT(20)
27 #define CPU_EFLAGS_ID BIT(21)
28 
29 
30 #define CR0_PE BIT(0)
31 #define CR0_MP BIT(1)
32 #define CR0_EM BIT(2)
33 #define CR0_TS BIT(3)
34 #define CR0_ET BIT(4)
35 #define CR0_NE BIT(5)
36 #define CR0_WP BIT(16)
37 #define CR0_AM BIT(18)
38 #define CR0_NW BIT(29)
39 #define CR0_CD BIT(30)
40 #define CR0_PG BIT(31)
41 
42 
43 #define CR4_VME BIT(0)
44 #define CR4_PVI BIT(1)
45 #define CR4_TSD BIT(2)
46 #define CR4_DE BIT(3)
47 #define CR4_PSE BIT(4)
48 #define CR4_PAE BIT(5)
49 #define CR4_MCE BIT(6)
50 #define CR4_PGE BIT(7)
51 #define CR4_PCE BIT(8)
52 #define CR4_OSFXSR BIT(9)
53 #define CR4_OSXMMEXCPT BIT(10)
54 #define CR4_UMIP BIT(11)
55 #define CR4_LA57 BIT(12)
56 #define CR4_VMXE BIT(13)
57 #define CR4_SMXE BIT(14)
58 #define CR4_FSGSBASE BIT(16)
59 #define CR4_PCIDE BIT(17)
60 #define CR4_OSXSAVE BIT(18)
61 #define CR4_SMEP BIT(20)
62 #define CR4_SMAP BIT(21)
63 #define CR4_PKE BIT(22)
64 
65 
66 #define XCR0_X87 BIT(0)
67 #define XCR0_SSE BIT(1)
68 #define XCR0_YMM_HI128 BIT(2)
69 #define XCR0_BNDREGS BIT(3)
70 #define XCR0_BNDCSR BIT(4)
71 #define XCR0_OPMASK BIT(5)
72 #define XCR0_ZMM_HI256 BIT(6)
73 #define XCR0_HI16_ZMM BIT(7)
74 #define XCR0_PT BIT(8)
75 #define XCR0_PKRU BIT(9)
76 // From the Intel SDM:
77 // software can enable the XSAVE feature set for AVX-512 state only if it
78 // does so for all three state components, and only if it also does so for AVX state and SSE state.This implies that
79 // the value of XCR0[7:5] is always either 000b or 111b.
80 #define XCR0_AVX_512_STATE (XCR0_ZMM_HI256 | XCR0_HI16_ZMM | XCR0_OPMASK)
81 
82 
83 #define PFEC_P BIT(0)
84 #define PFEC_RW BIT(1)
85 #define PFEC_US BIT(2)
86 #define PFEC_RSVD BIT(3)
87 #define PFEC_ID BIT(4)
88 #define PFEC_PK BIT(5)
89 #define PFEC_SGX BIT(15)
90 
91 
92 #define EFER_SCE BIT(0)
93 #define EFER_LME BIT(8)
94 #define EFER_LMA BIT(10)
95 #define EFER_NX BIT(11)
96 #define EFER_SVME BIT(12)
97 #define EFER_LMSLE BIT(13)
98 #define EFER_FFXSR BIT(14)
99 
100 
101 #define DESCRIPTOR_SIZE_32 8
102 #define DESCRIPTOR_SIZE_64 16
103 
104 #define VECTOR_DE 0
105 #define VECTOR_DB 1
106 #define VECTOR_BP 3
107 #define VECTOR_OF 4
108 #define VECTOR_BR 5
109 #define VECTOR_UD 6
110 #define VECTOR_NM 7
111 #define VECTOR_DF 8
112 #define VECTOR_TS 10
113 #define VECTOR_NP 11
114 #define VECTOR_SS 12
115 #define VECTOR_GP 13
116 #define VECTOR_PF 14
117 #define VECTOR_MF 16
118 #define VECTOR_AC 17
119 #define VECTOR_MC 18
120 #define VECTOR_XM 19
121 #define VECTOR_VE 20
122 
123 #define NO_ERRORCODE ((DWORD)-1)
124 
125 
126 //
127 // Processor structures definitions
128 //
129 #pragma pack(push)
130 #pragma pack(1)
131 
132 typedef struct _IDT_ENTRY64
133 {
141 
142 typedef struct _IDT_ENTRY32
143 {
150 
151 #pragma pack(pop)
152 
153 #endif // _PROCESSOR_H_
WORD Offset15_0
Definition: processor.h:134
uint8_t BYTE
Definition: intro_types.h:47
uint16_t WORD
Definition: intro_types.h:48
DWORD Reserved2
Definition: processor.h:139
struct _IDT_ENTRY32 IDT_ENTRY32
WORD Offset31_16
Definition: processor.h:148
WORD Offset31_16
Definition: processor.h:137
DWORD Offset63_32
Definition: processor.h:138
struct _IDT_ENTRY32 * PIDT_ENTRY32
struct _IDT_ENTRY64 IDT_ENTRY64
uint32_t DWORD
Definition: intro_types.h:49
WORD Selector
Definition: processor.h:135
WORD Selector
Definition: processor.h:145
struct _IDT_ENTRY64 * PIDT_ENTRY64
WORD Offset15_0
Definition: processor.h:144