vmcs_intel_x64_debug.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 // Author: Connor Davis <davisc@ainfosec.com>
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
22 
23 #ifndef VMCS_INTEL_X64_DEBUG_H
24 #define VMCS_INTEL_X64_DEBUG_H
25 
41 
42 // *INDENT-OFF*
43 
44 namespace intel_x64
45 {
46 namespace vmcs
47 {
48 
49 namespace debug
50 {
51  inline void dump();
52  inline void dump_16bit_control_fields();
53  inline void dump_16bit_guest_state_fields();
54  inline void dump_16bit_host_state_fields();
55  inline void dump_64bit_control_fields();
56  inline void dump_64bit_read_only_data_field();
57  inline void dump_64bit_guest_state_fields();
58  inline void dump_64bit_host_state_fields();
59  inline void dump_32bit_control_fields();
61  inline void dump_32bit_guest_state_fields();
62  inline void dump_32bit_host_state_field();
67  inline void dump_vmx_controls();
71  inline void dump_vm_exit_control_fields();
72  inline void dump_vm_entry_control_fields();
73 
74  inline void dump_vmcs_field(vmcs::field_type addr, const char *name, bool exists);
75  inline void dump_vm_control(const char *name, bool is_set);
76 
77  inline void dump()
78  {
79  bfdebug << "----------------------------------------" << bfendl;
80  bfdebug << "- VMCS Dump -" << bfendl;
81  bfdebug << "----------------------------------------" << bfendl;
82 
99 
100  bfdebug << bfendl;
101  }
102 
104  {
105  bfdebug << bfendl;
106 
110 
114 
118  }
119 
121  {
122  bfdebug << bfendl;
123 
127 
131 
135 
139 
143 
147 
151 
155 
159  }
160 
162  {
163  bfdebug << bfendl;
164 
168 
172 
176 
180 
184 
188 
192  }
193 
194 
196  {
197  bfdebug << bfendl;
198 
202 
206 
210 
214 
218 
222 
226 
230 
234 
238 
242 
246 
250 
254 
258 
262 
266 
270 
274 
278 
282 
286  }
287 
289  {
290  bfdebug << bfendl;
291 
295  }
296 
298  {
299  bfdebug << bfendl;
300 
304 
308 
312 
316 
320 
324 
328 
332 
336  }
337 
339  {
340  bfdebug << bfendl;
341 
345 
349 
353  }
354 
356  {
357  bfdebug << bfendl;
358 
362 
366 
370 
374 
378 
382 
386 
390 
394 
398 
402 
406 
410 
414 
418 
422 
425  ple_gap::exists());
426 
430 
431  }
432 
434  {
435  bfdebug << bfendl;
436 
440 
444 
448 
452 
456 
460 
464 
468  }
469 
471  {
472  bfdebug << bfendl;
473 
477 
481 
485 
489 
493 
497 
501 
505 
509 
513 
517 
521 
525 
529 
533 
537 
541 
545 
549 
553 
557 
561 
565  }
566 
568  {
569  bfdebug << bfendl;
570 
574  }
575 
577  {
578  bfdebug << bfendl;
579 
583 
587 
591 
595 
599 
603 
607 
611  }
612 
614  {
615  bfdebug << bfendl;
616 
620 
622  io_rcx::name,
623  io_rcx::exists());
624 
626  io_rsi::name,
627  io_rsi::exists());
628 
630  io_rdi::name,
631  io_rdi::exists());
632 
634  io_rip::name,
635  io_rip::exists());
636 
640  }
641 
643  {
644  bfdebug << bfendl;
645 
649 
653 
657 
661 
665 
669 
673 
677 
681 
685 
689 
693 
697 
701 
705 
709 
713 
717 
721 
725  }
726 
728  {
729  bfdebug << bfendl;
730 
733  host_cr0::exists());
734 
737  host_cr3::exists());
738 
741  host_cr4::exists());
742 
746 
750 
754 
758 
762 
766 
770 
773  host_rsp::exists());
774 
777  host_rip::exists());
778  }
779 
780  inline void dump_vmx_controls()
781  {
782  bfdebug << bfendl;
783 
789  }
790 
792  {
793  bfdebug << "vmcs::pin_based_vm_execution_controls enabled flags:" << bfendl;
794 
797 
800 
803 
806 
809 
810  bfdebug << bfendl;
811  }
812 
814  {
815  bfdebug << "vmcs::primary_processor_based_vm_execution_controls enabled flags:" << bfendl;
816 
819 
822 
825 
828 
831 
834 
837 
840 
843 
846 
849 
852 
855 
858 
861 
864 
867 
870 
873 
876 
879 
880  bfdebug << bfendl;
881  }
882 
884  {
885  bfdebug << "vmcs::secondary_processor_based_vm_execution_controls enabled flags:" << bfendl;
886 
888  {
889  bfinfo << "doesn't exist" << bfendl;
890  return;
891  }
892 
895 
898 
901 
904 
907 
910 
913 
916 
919 
922 
925 
928 
931 
934 
937 
940 
943 
946 
947  bfdebug << bfendl;
948  }
949 
951  {
952  bfdebug << "vmcs::vm_exit_controls enabled flags:" << bfendl;
953 
956 
959 
962 
965 
968 
971 
974 
977 
980 
981  bfdebug << bfendl;
982  }
983 
985  {
986  bfdebug << "vmcs::vm_entry_controls enabled flags:" << bfendl;
987 
990 
993 
996 
999 
1002 
1005 
1008 
1009  bfdebug << bfendl;
1010  }
1011 
1012  inline void
1013  dump_vmcs_field(vmcs::field_type addr, const char *name, bool exists)
1014  {
1015  bfdebug << "vmcs::" << name << ": ";
1016 
1017  if (!exists)
1018  bfinfo << "doesn't exist" << bfendl;
1019  else
1020  bfinfo << view_as_pointer(vm::read(addr, name)) << bfendl;
1021  }
1022 
1023  inline void dump_vm_control(const char *name, bool is_set)
1024  {
1025  if (is_set)
1026  bfdebug << " - " << name << bfendl;
1027  }
1028 }
1029 }
1030 }
1031 
1032 // *INDENT-ON*
1033 
1034 #endif
auto is_enabled()
auto is_enabled()
constexpr const auto addr
constexpr const auto name
void dump_vmcs_field(vmcs::field_type addr, const char *name, bool exists)
void dump_secondary_processor_based_vm_execution_controls()
constexpr const auto name
constexpr const auto addr
auto exists() noexcept
auto exists() noexcept
auto exists() noexcept
auto is_enabled()
constexpr const auto name
constexpr const auto name
void dump_vm_control(const char *name, bool is_set)
constexpr const auto name
constexpr const auto name
constexpr const auto addr
Definition: cpuid_x64.h:80
auto is_enabled()
constexpr const auto name
constexpr const auto name
constexpr const auto name
auto exists() noexcept
const void * view_as_pointer(const T val)
constexpr const auto addr
auto is_enabled()
constexpr const auto addr
bool exists() noexcept
constexpr const auto addr
constexpr const auto addr
auto read(field_type field, name_type name="")
constexpr const auto name
constexpr const auto name
Definition: cpuid_x64.h:81
auto is_enabled()
void dump_primary_processor_based_vm_execution_controls()
auto is_enabled()
constexpr const auto name
auto exists() noexcept
constexpr const auto name
constexpr const auto name