state_save_intel_x64.h
Go to the documentation of this file.
1 //
2 // Bareflank Hypervisor
3 //
4 // Copyright (C) 2015 Assured Information Security, Inc.
5 // Author: Rian Quinn <quinnr@ainfosec.com>
6 // Author: Brendan Kerrigan <kerriganb@ainfosec.com>
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Lesser General Public
10 // License as published by the Free Software Foundation; either
11 // version 2.1 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 // Lesser General Public License for more details.
17 //
18 // You should have received a copy of the GNU Lesser General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 
22 #ifndef STATE_SAVE_INTEL_X64_H
23 #define STATE_SAVE_INTEL_X64_H
24 
25 #pragma pack(push, 1)
26 
28 {
29  uint64_t rax; // 0x000
30  uint64_t rbx; // 0x008
31  uint64_t rcx; // 0x010
32  uint64_t rdx; // 0x018
33  uint64_t rbp; // 0x020
34  uint64_t rsi; // 0x028
35  uint64_t rdi; // 0x030
36  uint64_t r08; // 0x038
37  uint64_t r09; // 0x040
38  uint64_t r10; // 0x048
39  uint64_t r11; // 0x050
40  uint64_t r12; // 0x058
41  uint64_t r13; // 0x060
42  uint64_t r14; // 0x068
43  uint64_t r15; // 0x070
44  uint64_t rip; // 0x078
45  uint64_t rsp; // 0x080
46 
47  uint64_t vcpuid; // 0x088
48  uint64_t vmxon_ptr; // 0x090
49  uint64_t vmcs_ptr; // 0x098
50  uint64_t exit_handler_ptr; // 0x0A0
51 
52  uint64_t user1; // 0x0A8
53  uint64_t user2; // 0x0B0
54  uint64_t user3; // 0x0B8
55 
56  uint64_t ymm00[4]; // 0x0C0
57  uint64_t ymm01[4]; // 0x0E0
58  uint64_t ymm02[4]; // 0x100
59  uint64_t ymm03[4]; // 0x120
60  uint64_t ymm04[4]; // 0x140
61  uint64_t ymm05[4]; // 0x160
62  uint64_t ymm06[4]; // 0x180
63  uint64_t ymm07[4]; // 0x1A0
64  uint64_t ymm08[4]; // 0x1C0
65  uint64_t ymm09[4]; // 0x1E0
66  uint64_t ymm10[4]; // 0x200
67  uint64_t ymm11[4]; // 0x220
68  uint64_t ymm12[4]; // 0x240
69  uint64_t ymm13[4]; // 0x260
70  uint64_t ymm14[4]; // 0x280
71  uint64_t ymm15[4]; // 0x2A0
72 
73  uint64_t remaining_space_in_page[0x1A8];
74 };
75 
76 #pragma pack(pop)
77 
78 #endif
uint64_t remaining_space_in_page[0x1A8]