remove references to nt_memory_permission from backend

This commit is contained in:
3fault
2025-07-09 14:43:06 -04:00
parent 8ec184d57f
commit 19574fb512
8 changed files with 34 additions and 31 deletions

View File

@@ -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;
}

View File

@@ -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<uint8_t>(permissions.common));
const auto res = icicle_map_memory(this->emu_, address, size, static_cast<uint8_t>(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<uint8_t>(permissions.common));
const auto res = icicle_protect_memory(this->emu_, address, size, static_cast<uint8_t>(permissions));
ice(res, "Failed to apply permissions");
}

View File

@@ -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<uint32_t>(permissions.common)));
uce(uc_mem_map(*this, address, size, static_cast<uint32_t>(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<uint32_t>(permissions.common)));
uce(uc_mem_protect(*this, address, size, static_cast<uint32_t>(permissions)));
}
emulator_hook* hook_instruction(const int instruction_type, instruction_hook_callback callback) override

View File

@@ -2,7 +2,7 @@
#include <vector>
#include <functional>
#include "windows-emulator/memory_permission_ext.hpp"
#include "memory_permission.hpp"
using mmio_read_callback = std::function<void(uint64_t addr, void* data, size_t size)>;
using mmio_write_callback = std::function<void(uint64_t addr, const void* data, size_t size)>;
@@ -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 <typename T>

View File

@@ -1,12 +1,12 @@
#pragma once
#include "windows-emulator/memory_permission_ext.hpp"
#include "memory_permission.hpp"
#include <cstddef>
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

View File

@@ -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);
}

View File

@@ -3,7 +3,7 @@
#include <atomic>
#include <cstdint>
#include "memory_region.hpp"
#include "memory_permission_ext.hpp"
#include "serialization.hpp"
#include <memory_interface.hpp>
@@ -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<std::uint64_t> 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();
};

View File

@@ -2,6 +2,7 @@
#include <cstdint>
#include <string>
#include <emulator.hpp>
#include "memory_permission_ext.hpp"
inline std::string get_permission_string(const memory_permission permission)
{