From f1d54f7417f48d2c3dc69739e25faff7eb87617f Mon Sep 17 00:00:00 2001 From: 3fault Date: Thu, 17 Jul 2025 11:19:56 -0400 Subject: [PATCH] Parameterize basic_memory_region to support extended memory flags --- src/emulator/memory_region.hpp | 5 +++-- src/windows-emulator/memory_manager.hpp | 10 ++-------- src/windows-emulator/module/mapped_module.hpp | 2 +- src/windows-emulator/module/module_manager.cpp | 4 ++-- 4 files changed, 8 insertions(+), 13 deletions(-) diff --git a/src/emulator/memory_region.hpp b/src/emulator/memory_region.hpp index cdf25ce9..71482bb5 100644 --- a/src/emulator/memory_region.hpp +++ b/src/emulator/memory_region.hpp @@ -2,14 +2,15 @@ #include "memory_permission.hpp" #include +template struct basic_memory_region { uint64_t start{}; size_t length{}; // uint64_t? - memory_permission permissions{}; + PermissionType permissions{}; }; -struct memory_region : basic_memory_region +struct memory_region : basic_memory_region<> { bool committed{}; }; diff --git a/src/windows-emulator/memory_manager.hpp b/src/windows-emulator/memory_manager.hpp index 8f533e3c..15bf6dd4 100644 --- a/src/windows-emulator/memory_manager.hpp +++ b/src/windows-emulator/memory_manager.hpp @@ -4,6 +4,7 @@ #include #include "memory_permission_ext.hpp" +#include "memory_region.hpp" #include "serialization.hpp" #include @@ -14,14 +15,7 @@ constexpr auto MAX_ALLOCATION_ADDRESS = 0x00007ffffffeffffULL; // 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 +struct region_info : basic_memory_region { uint64_t allocation_base{}; size_t allocation_length{}; diff --git a/src/windows-emulator/module/mapped_module.hpp b/src/windows-emulator/module/mapped_module.hpp index dfe2b268..2019243f 100644 --- a/src/windows-emulator/module/mapped_module.hpp +++ b/src/windows-emulator/module/mapped_module.hpp @@ -15,7 +15,7 @@ using address_name_mapping = std::map; struct mapped_section { std::string name{}; - basic_memory_region region{}; + basic_memory_region<> region{}; }; struct mapped_module diff --git a/src/windows-emulator/module/module_manager.cpp b/src/windows-emulator/module/module_manager.cpp index c8549218..bb57fa77 100644 --- a/src/windows-emulator/module/module_manager.cpp +++ b/src/windows-emulator/module/module_manager.cpp @@ -23,14 +23,14 @@ namespace utils buffer.read(sym.address); } - static void serialize(buffer_serializer& buffer, const basic_memory_region& region) + static void serialize(buffer_serializer& buffer, const basic_memory_region<>& region) { buffer.write(region.start); buffer.write(region.length); buffer.write(region.permissions); } - static void deserialize(buffer_deserializer& buffer, basic_memory_region& region) + static void deserialize(buffer_deserializer& buffer, basic_memory_region<>& region) { buffer.read(region.start); region.length = static_cast(buffer.read());