From 19574fb512cf7ad9836d3fcdfee9e547319514ee Mon Sep 17 00:00:00 2001 From: 3fault Date: Wed, 9 Jul 2025 14:43:06 -0400 Subject: [PATCH] remove references to nt_memory_permission from backend --- src/analyzer/main.cpp | 2 +- .../icicle-emulator/icicle_x86_64_emulator.cpp | 9 ++++----- .../unicorn_x86_64_emulator.cpp | 8 ++++---- src/emulator/memory_interface.hpp | 6 +++--- src/emulator/memory_region.hpp | 4 ++-- src/windows-emulator/memory_manager.cpp | 18 ++++++------------ src/windows-emulator/memory_manager.hpp | 17 +++++++++++++---- src/windows-emulator/memory_utils.hpp | 1 + 8 files changed, 34 insertions(+), 31 deletions(-) diff --git a/src/analyzer/main.cpp b/src/analyzer/main.cpp index 5f8814b8..5739b501 100644 --- a/src/analyzer/main.cpp +++ b/src/analyzer/main.cpp @@ -317,7 +317,7 @@ namespace { for (const auto& section : exe.sections) { - if ((section.region.permissions.common & memory_permission::exec) != memory_permission::exec) + if ((section.region.permissions & memory_permission::exec) != memory_permission::exec) { continue; } diff --git a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp index 2895fe1d..cb759e3a 100644 --- a/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp +++ b/src/backends/icicle-emulator/icicle_x86_64_emulator.cpp @@ -193,9 +193,9 @@ namespace icicle icicle_map_mmio(this->emu_, address, size, read_wrapper, ptr, write_wrapper, ptr); } - void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override + void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override { - const auto res = icicle_map_memory(this->emu_, address, size, static_cast(permissions.common)); + const auto res = icicle_map_memory(this->emu_, address, size, static_cast(permissions)); ice(res, "Failed to map memory"); } @@ -222,10 +222,9 @@ namespace icicle ice(res, "Failed to write memory"); } - void apply_memory_protection(const uint64_t address, const size_t size, - nt_memory_permission permissions) override + void apply_memory_protection(const uint64_t address, const size_t size, memory_permission permissions) override { - const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions.common)); + const auto res = icicle_protect_memory(this->emu_, address, size, static_cast(permissions)); ice(res, "Failed to apply permissions"); } diff --git a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp index d1e48259..52629f76 100644 --- a/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp +++ b/src/backends/unicorn-emulator/unicorn_x86_64_emulator.cpp @@ -335,9 +335,9 @@ namespace unicorn this->mmio_[address] = std::move(cb); } - void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override + void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override { - uce(uc_mem_map(*this, address, size, static_cast(permissions.common))); + uce(uc_mem_map(*this, address, size, static_cast(permissions))); } void unmap_memory(const uint64_t address, const size_t size) override @@ -367,9 +367,9 @@ namespace unicorn } void apply_memory_protection(const uint64_t address, const size_t size, - nt_memory_permission permissions) override + memory_permission permissions) override { - uce(uc_mem_protect(*this, address, size, static_cast(permissions.common))); + uce(uc_mem_protect(*this, address, size, static_cast(permissions))); } emulator_hook* hook_instruction(const int instruction_type, instruction_hook_callback callback) override diff --git a/src/emulator/memory_interface.hpp b/src/emulator/memory_interface.hpp index b8e67096..2f735e9a 100644 --- a/src/emulator/memory_interface.hpp +++ b/src/emulator/memory_interface.hpp @@ -2,7 +2,7 @@ #include #include -#include "windows-emulator/memory_permission_ext.hpp" +#include "memory_permission.hpp" using mmio_read_callback = std::function; using mmio_write_callback = std::function; @@ -22,10 +22,10 @@ class memory_interface private: virtual void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) = 0; - virtual void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) = 0; + virtual void map_memory(uint64_t address, size_t size, memory_permission permissions) = 0; virtual void unmap_memory(uint64_t address, size_t size) = 0; - virtual void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) = 0; + virtual void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) = 0; public: template diff --git a/src/emulator/memory_region.hpp b/src/emulator/memory_region.hpp index 51324467..cdf25ce9 100644 --- a/src/emulator/memory_region.hpp +++ b/src/emulator/memory_region.hpp @@ -1,12 +1,12 @@ #pragma once -#include "windows-emulator/memory_permission_ext.hpp" +#include "memory_permission.hpp" #include struct basic_memory_region { uint64_t start{}; size_t length{}; // uint64_t? - nt_memory_permission permissions{}; + memory_permission permissions{}; }; struct memory_region : basic_memory_region diff --git a/src/windows-emulator/memory_manager.cpp b/src/windows-emulator/memory_manager.cpp index 7e149e50..9f45a8b4 100644 --- a/src/windows-emulator/memory_manager.cpp +++ b/src/windows-emulator/memory_manager.cpp @@ -1,4 +1,3 @@ -#include "memory_permission.hpp" #include "std_include.hpp" #include "memory_manager.hpp" @@ -269,12 +268,9 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size, if (!reserve_only) { - this->map_memory(address, size, permissions); - - auto common = memory_permission::read_write; - auto extended = permissions.is_guarded() ? memory_permission_ext::guard : memory_permission_ext::none; - - entry->second.committed_regions[address] = committed_region{size, nt_memory_permission{common, extended}}; + this->map_memory(address, size, permissions.is_guarded() ? memory_permission::none : permissions.common); + entry->second.committed_regions[address] = + committed_region{size, nt_memory_permission{memory_permission::read_write, permissions.extended}}; } this->update_layout_version(); @@ -630,11 +626,9 @@ void memory_manager::map_mmio(const uint64_t address, const size_t size, mmio_re this->memory_->map_mmio(address, size, std::move(read_cb), std::move(write_cb)); } -void memory_manager::map_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions) +void memory_manager::map_memory(const uint64_t address, const size_t size, const memory_permission permissions) { - auto perms = permissions.is_guarded() ? nt_memory_permission(memory_permission::none) : permissions; - - this->memory_->map_memory(address, size, perms); + this->memory_->map_memory(address, size, permissions); } void memory_manager::unmap_memory(const uint64_t address, const size_t size) @@ -643,7 +637,7 @@ void memory_manager::unmap_memory(const uint64_t address, const size_t size) } void memory_manager::apply_memory_protection(const uint64_t address, const size_t size, - const nt_memory_permission permissions) + const memory_permission permissions) { this->memory_->apply_memory_protection(address, size, permissions); } diff --git a/src/windows-emulator/memory_manager.hpp b/src/windows-emulator/memory_manager.hpp index a67d383f..8f533e3c 100644 --- a/src/windows-emulator/memory_manager.hpp +++ b/src/windows-emulator/memory_manager.hpp @@ -3,7 +3,7 @@ #include #include -#include "memory_region.hpp" +#include "memory_permission_ext.hpp" #include "serialization.hpp" #include @@ -12,7 +12,16 @@ constexpr auto ALLOCATION_GRANULARITY = 0x0000000000010000ULL; constexpr auto MIN_ALLOCATION_ADDRESS = 0x0000000000010000ULL; constexpr auto MAX_ALLOCATION_ADDRESS = 0x00007ffffffeffffULL; -struct region_info : basic_memory_region +// This maps to the `basic_memory_region` struct defined in +// emulator\memory_region.hpp +struct nt_basic_memory_region +{ + uint64_t start{}; + size_t length{}; + nt_memory_permission permissions{}; +}; + +struct region_info : nt_basic_memory_region { uint64_t allocation_base{}; size_t allocation_length{}; @@ -96,9 +105,9 @@ class memory_manager : public memory_interface std::atomic layout_version_{0}; void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) final; - void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) final; + void map_memory(uint64_t address, size_t size, memory_permission permissions) final; void unmap_memory(uint64_t address, size_t size) final; - void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) final; + void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) final; void update_layout_version(); }; diff --git a/src/windows-emulator/memory_utils.hpp b/src/windows-emulator/memory_utils.hpp index bcb05747..e50b0098 100644 --- a/src/windows-emulator/memory_utils.hpp +++ b/src/windows-emulator/memory_utils.hpp @@ -2,6 +2,7 @@ #include #include #include +#include "memory_permission_ext.hpp" inline std::string get_permission_string(const memory_permission permission) {