diff --git a/.gitignore b/.gitignore index d163863..b1d498d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -build/ \ No newline at end of file +build/ +*.aps \ No newline at end of file diff --git a/README.md b/README.md index 69144d3..dbe6e11 100644 --- a/README.md +++ b/README.md @@ -1 +1,11 @@ -# secret \ No newline at end of file +# secret + +Hypervisor experiments. +Nothing serious. Yet. + +## Credits + +SimpleVisor +gbhv + +Icon \ No newline at end of file diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 46d1a8c..3140a74 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,4 +1,3 @@ add_subdirectory(shared) add_subdirectory(driver) -add_subdirectory(driver_file) add_subdirectory(runner) \ No newline at end of file diff --git a/src/driver/CMakeLists.txt b/src/driver/CMakeLists.txt index 29aca42..63f27f4 100644 --- a/src/driver/CMakeLists.txt +++ b/src/driver/CMakeLists.txt @@ -28,3 +28,18 @@ target_link_libraries(driver ia32_doc shared ) + +################################################ + +set(DRIVER_FILE "$") + +file (GENERATE + OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$>/driver_file.h" + CONTENT "#define DRIVER_FILE \"${DRIVER_FILE}\"\n" +) + +add_library(driver_file INTERFACE) + +target_include_directories(driver_file INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/$>) + +add_dependencies(driver_file driver) diff --git a/src/driver/hypervisor.cpp b/src/driver/hypervisor.cpp index b6211c3..23714ec 100644 --- a/src/driver/hypervisor.cpp +++ b/src/driver/hypervisor.cpp @@ -9,6 +9,9 @@ #include "assembly.hpp" #include "string.hpp" +#define DPL_USER 3 +#define DPL_SYSTEM 0 + namespace { hypervisor* instance{nullptr}; @@ -163,7 +166,7 @@ bool hypervisor::install_ept_hook(const void* destination, const void* source, c vmx::ept_translation_hint* translation_hint) { volatile long failures = 0; - thread::dispatch_on_all_cores([&]() + thread::dispatch_on_all_cores([&] { if (!this->try_install_ept_hook_on_core(destination, source, length, translation_hint)) { @@ -176,7 +179,7 @@ bool hypervisor::install_ept_hook(const void* destination, const void* source, c void hypervisor::disable_all_ept_hooks() const { - thread::dispatch_on_all_cores([&]() + thread::dispatch_on_all_cores([&] { auto* vm_state = this->get_current_vm_state(); if (!vm_state) @@ -203,7 +206,7 @@ void hypervisor::enable() const auto cr3 = __readcr3(); volatile long failures = 0; - thread::dispatch_on_all_cores([&]() + thread::dispatch_on_all_cores([&] { if (!this->try_enable_core(cr3)) { @@ -332,7 +335,8 @@ vmx::gdt_entry convert_gdt_entry(const uint64_t gdt_base, const uint16_t selecto return result; } - const auto* gdt_entry = reinterpret_cast(gdt_base + static_cast(selector.index) * 8); + const auto* gdt_entry = reinterpret_cast(gdt_base + static_cast(selector.index) * + 8); result.selector = selector; result.limit = __segmentlimit(selector.flags); @@ -377,16 +381,13 @@ void vmx_handle_invd() __wbinvd(); } -#define DPL_USER 3 -#define DPL_SYSTEM 0 - void vmx_handle_cpuid(vmx::guest_context& guest_context) { INT32 cpu_info[4]; - if ((guest_context.vp_regs->Rax == 0x41414141) && - (guest_context.vp_regs->Rcx == 0x42424242) && - ((read_vmx(VMCS_GUEST_CS_SELECTOR) & SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_MASK) == DPL_SYSTEM)) + if (guest_context.vp_regs->Rax == 0x41414141 && + guest_context.vp_regs->Rcx == 0x42424242 && + (read_vmx(VMCS_GUEST_CS_SELECTOR) & SEGMENT_ACCESS_RIGHTS_DESCRIPTOR_PRIVILEGE_LEVEL_MASK) == DPL_SYSTEM) { guest_context.exit_vm = true; return; diff --git a/src/driver_file/CMakeLists.txt b/src/driver_file/CMakeLists.txt deleted file mode 100644 index b1acf44..0000000 --- a/src/driver_file/CMakeLists.txt +++ /dev/null @@ -1,12 +0,0 @@ -set(DRIVER_FILE "$") - -file (GENERATE - OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/$>/driver_file.h" - CONTENT "#define DRIVER_FILE \"${DRIVER_FILE}\"\n" -) - -add_library(driver_file INTERFACE) - -target_include_directories(driver_file INTERFACE ${CMAKE_CURRENT_BINARY_DIR}/$>) - -add_dependencies(driver_file driver)