From 0575b3c023cb117e476e32682a294834bf0b1b09 Mon Sep 17 00:00:00 2001 From: Zero Hu <632284304@qq.com> Date: Mon, 3 Jan 2022 12:30:45 +0000 Subject: [PATCH] Replace libvoyager.cpp --- Voyager/libvoyager/libvoyager.cpp | 46 +++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 5 deletions(-) diff --git a/Voyager/libvoyager/libvoyager.cpp b/Voyager/libvoyager/libvoyager.cpp index 31bb227..83c2dff 100644 --- a/Voyager/libvoyager/libvoyager.cpp +++ b/Voyager/libvoyager/libvoyager.cpp @@ -27,6 +27,7 @@ auto voyager::init() -> vmxroot_error_t auto result = hypercall(VMEXIT_KEY, vmexit_command_t::init_page_tables, nullptr); if (result != vmxroot_error_t::error_success) return result; + //hypercall(VMEXIT_KEY, vmexit_command_t::DiablePCID, nullptr); } } @@ -34,9 +35,44 @@ auto voyager::init() -> vmxroot_error_t return vmxroot_error_t::error_success; } +auto voyager::addShadowPage(guest_virt_t uAddr, guest_virt_t uPageRead, guest_virt_t uPageExecute)->vmxroot_error_t +{ + command_t command = {0}; + command.addShadowPage = { uAddr,uPageRead,uPageExecute }; + return hypercall(VMEXIT_KEY,vmexit_command_t::add_shadow_page, &command); +} + +auto voyager::addShadowPagePhys(guest_virt_t uAddr, guest_phys_t uPageRead, guest_phys_t uPageExecute)->vmxroot_error_t +{ + command_t command = { 0 }; + command.addShadowPagePhys = { uAddr,uPageRead,uPageExecute }; + return hypercall(VMEXIT_KEY, vmexit_command_t::add_shadow_page_phys, &command); +} + +auto voyager::deleteShadowPage(guest_virt_t uAddr)->vmxroot_error_t +{ + command_t command = { 0 }; + command.deleteShaowPage = { uAddr }; + return hypercall(VMEXIT_KEY, vmexit_command_t::delete_shadow_page, &command); +} + +auto voyager::unHideShadowPage(guest_virt_t uAddr)->vmxroot_error_t +{ + command_t command = { 0 }; + command.unHideShaowPage = { uAddr }; + return hypercall(VMEXIT_KEY, vmexit_command_t::unhide_shadow_page, &command); +} + +auto voyager::disablePageProtection(guest_phys_t phys_addr)->vmxroot_error_t +{ + command_t command = { 0 }; + command.disablePageProtection.phys_addr = phys_addr; + return hypercall(VMEXIT_KEY, vmexit_command_t::disable_page_protection, &command); +} + auto voyager::current_dirbase()->guest_phys_t { - command_t command; + command_t command = {0}; auto result = hypercall(VMEXIT_KEY, vmexit_command_t::get_dirbase, &command); if (result != vmxroot_error_t::error_success) @@ -47,7 +83,7 @@ auto voyager::current_dirbase()->guest_phys_t auto voyager::translate(guest_virt_t virt_addr) -> guest_phys_t { - command_t command; + command_t command = {0}; command.translate_virt.virt_src = virt_addr; const auto result = hypercall(VMEXIT_KEY, vmexit_command_t::translate, &command); @@ -60,14 +96,14 @@ auto voyager::translate(guest_virt_t virt_addr) -> guest_phys_t auto voyager::read_phys(guest_phys_t phys_addr, guest_virt_t buffer, u64 size) -> vmxroot_error_t { - command_t command; + command_t command = {0}; command.copy_phys = { phys_addr, buffer, size }; return hypercall(VMEXIT_KEY, vmexit_command_t::read_guest_phys, &command); } auto voyager::write_phys(guest_phys_t phys_addr, guest_virt_t buffer, u64 size) -> vmxroot_error_t { - command_t command; + command_t command = {0}; command.copy_phys = { phys_addr, buffer, size }; return hypercall(VMEXIT_KEY, vmexit_command_t::write_guest_phys, &command); } @@ -75,7 +111,7 @@ auto voyager::write_phys(guest_phys_t phys_addr, guest_virt_t buffer, u64 size) auto voyager::copy_virt(guest_phys_t dirbase_src, guest_virt_t virt_src, guest_phys_t dirbase_dest, guest_virt_t virt_dest, u64 size) -> vmxroot_error_t { - command_t command; + command_t command = {0}; command.copy_virt = { dirbase_src, virt_src, dirbase_dest, virt_dest, size }; return hypercall(VMEXIT_KEY, vmexit_command_t::copy_guest_virt, &command); } \ No newline at end of file