mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-18 19:23:56 +00:00
Update occurances of memory_permission to nt_memory_permission where needed
This commit is contained in:
@@ -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, memory_permission permissions) override
|
||||
void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override
|
||||
{
|
||||
const auto res = icicle_map_memory(this->emu_, address, size, static_cast<uint8_t>(permissions));
|
||||
const auto res = icicle_map_memory(this->emu_, address, size, static_cast<uint8_t>(permissions.common));
|
||||
ice(res, "Failed to map memory");
|
||||
}
|
||||
|
||||
@@ -222,9 +222,9 @@ namespace icicle
|
||||
ice(res, "Failed to write memory");
|
||||
}
|
||||
|
||||
void apply_memory_protection(const uint64_t address, const size_t size, memory_permission permissions) override
|
||||
void apply_memory_protection(const uint64_t address, const size_t size, nt_memory_permission permissions) override
|
||||
{
|
||||
const auto res = icicle_protect_memory(this->emu_, address, size, static_cast<uint8_t>(permissions));
|
||||
const auto res = icicle_protect_memory(this->emu_, address, size, static_cast<uint8_t>(permissions.common));
|
||||
ice(res, "Failed to apply permissions");
|
||||
}
|
||||
|
||||
|
||||
@@ -335,9 +335,9 @@ namespace unicorn
|
||||
this->mmio_[address] = std::move(cb);
|
||||
}
|
||||
|
||||
void map_memory(const uint64_t address, const size_t size, memory_permission permissions) override
|
||||
void map_memory(const uint64_t address, const size_t size, nt_memory_permission permissions) override
|
||||
{
|
||||
uce(uc_mem_map(*this, address, size, static_cast<uint32_t>(permissions)));
|
||||
uce(uc_mem_map(*this, address, size, static_cast<uint32_t>(permissions.common)));
|
||||
}
|
||||
|
||||
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,
|
||||
memory_permission permissions) override
|
||||
nt_memory_permission permissions) override
|
||||
{
|
||||
uce(uc_mem_protect(*this, address, size, static_cast<uint32_t>(permissions)));
|
||||
uce(uc_mem_protect(*this, address, size, static_cast<uint32_t>(permissions.common)));
|
||||
}
|
||||
|
||||
emulator_hook* hook_instruction(const int instruction_type, instruction_hook_callback callback) override
|
||||
|
||||
@@ -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, memory_permission permissions) = 0;
|
||||
virtual void map_memory(uint64_t address, size_t size, nt_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, memory_permission permissions) = 0;
|
||||
virtual void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) = 0;
|
||||
|
||||
public:
|
||||
template <typename T>
|
||||
|
||||
@@ -1,8 +1,10 @@
|
||||
#include "memory_permission.hpp"
|
||||
#include "std_include.hpp"
|
||||
#include "memory_manager.hpp"
|
||||
|
||||
#include "memory_region.hpp"
|
||||
#include "address_utils.hpp"
|
||||
#include "windows-emulator/memory_permission_ext.hpp"
|
||||
|
||||
#include <vector>
|
||||
#include <optional>
|
||||
@@ -73,7 +75,7 @@ namespace utils
|
||||
static void deserialize(buffer_deserializer& buffer, memory_manager::committed_region& region)
|
||||
{
|
||||
region.length = static_cast<size_t>(buffer.read<uint64_t>());
|
||||
region.permissions = buffer.read<memory_permission>();
|
||||
region.permissions = buffer.read<nt_memory_permission>();
|
||||
}
|
||||
|
||||
static void serialize(buffer_serializer& buffer, const memory_manager::reserved_region& region)
|
||||
@@ -170,8 +172,8 @@ void memory_manager::deserialize_memory_state(utils::buffer_deserializer& buffer
|
||||
}
|
||||
}
|
||||
|
||||
bool memory_manager::protect_memory(const uint64_t address, const size_t size, const memory_permission permissions,
|
||||
memory_permission* old_permissions)
|
||||
bool memory_manager::protect_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions,
|
||||
nt_memory_permission* old_permissions)
|
||||
{
|
||||
const auto entry = this->find_reserved_region(address);
|
||||
if (entry == this->reserved_regions_.end())
|
||||
@@ -249,7 +251,7 @@ bool memory_manager::allocate_mmio(const uint64_t address, const size_t size, mm
|
||||
return true;
|
||||
}
|
||||
|
||||
bool memory_manager::allocate_memory(const uint64_t address, const size_t size, const memory_permission permissions,
|
||||
bool memory_manager::allocate_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions,
|
||||
const bool reserve_only)
|
||||
{
|
||||
if (this->overlaps_reserved_region(address, size))
|
||||
@@ -268,7 +270,13 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size,
|
||||
if (!reserve_only)
|
||||
{
|
||||
this->map_memory(address, size, permissions);
|
||||
entry->second.committed_regions[address] = committed_region{size, memory_permission::read_write};
|
||||
|
||||
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->update_layout_version();
|
||||
@@ -276,7 +284,7 @@ bool memory_manager::allocate_memory(const uint64_t address, const size_t size,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool memory_manager::commit_memory(const uint64_t address, const size_t size, const memory_permission permissions)
|
||||
bool memory_manager::commit_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions)
|
||||
{
|
||||
const auto entry = this->find_reserved_region(address);
|
||||
if (entry == this->reserved_regions_.end())
|
||||
@@ -454,7 +462,7 @@ void memory_manager::unmap_all_memory()
|
||||
this->reserved_regions_.clear();
|
||||
}
|
||||
|
||||
uint64_t memory_manager::allocate_memory(const size_t size, const memory_permission permissions,
|
||||
uint64_t memory_manager::allocate_memory(const size_t size, const nt_memory_permission permissions,
|
||||
const bool reserve_only)
|
||||
{
|
||||
const auto allocation_base = this->find_free_allocation_base(size);
|
||||
@@ -500,8 +508,8 @@ region_info memory_manager::get_region_info(const uint64_t address)
|
||||
region_info result{};
|
||||
result.start = MIN_ALLOCATION_ADDRESS;
|
||||
result.length = static_cast<size_t>(MAX_ALLOCATION_ADDRESS - result.start);
|
||||
result.permissions = memory_permission::none;
|
||||
result.initial_permissions = memory_permission::none;
|
||||
result.permissions = nt_memory_permission();
|
||||
result.initial_permissions = nt_memory_permission();
|
||||
result.allocation_base = {};
|
||||
result.allocation_length = result.length;
|
||||
result.is_committed = false;
|
||||
@@ -624,9 +632,13 @@ 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 memory_permission permissions)
|
||||
void memory_manager::map_memory(const uint64_t address, const size_t size, const nt_memory_permission permissions)
|
||||
{
|
||||
this->memory_->map_memory(address, size, permissions);
|
||||
auto perms = permissions.is_guarded()
|
||||
? nt_memory_permission(memory_permission::none)
|
||||
: permissions;
|
||||
|
||||
this->memory_->map_memory(address, size, perms);
|
||||
}
|
||||
|
||||
void memory_manager::unmap_memory(const uint64_t address, const size_t size)
|
||||
@@ -635,7 +647,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 memory_permission permissions)
|
||||
const nt_memory_permission permissions)
|
||||
{
|
||||
this->memory_->apply_memory_protection(address, size, permissions);
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@ struct region_info : basic_memory_region
|
||||
size_t allocation_length{};
|
||||
bool is_reserved{};
|
||||
bool is_committed{};
|
||||
memory_permission initial_permissions{};
|
||||
nt_memory_permission initial_permissions{};
|
||||
};
|
||||
|
||||
using mmio_read_callback = std::function<void(uint64_t addr, void* data, size_t size)>;
|
||||
@@ -35,7 +35,7 @@ class memory_manager : public memory_interface
|
||||
struct committed_region
|
||||
{
|
||||
size_t length{};
|
||||
memory_permission permissions{};
|
||||
nt_memory_permission permissions{};
|
||||
};
|
||||
|
||||
using committed_region_map = std::map<uint64_t, committed_region>;
|
||||
@@ -54,20 +54,20 @@ class memory_manager : public memory_interface
|
||||
bool try_read_memory(uint64_t address, void* data, size_t size) const final;
|
||||
void write_memory(uint64_t address, const void* data, size_t size) final;
|
||||
|
||||
bool protect_memory(uint64_t address, size_t size, memory_permission permissions,
|
||||
memory_permission* old_permissions = nullptr);
|
||||
bool protect_memory(uint64_t address, size_t size, nt_memory_permission permissions,
|
||||
nt_memory_permission* old_permissions = nullptr);
|
||||
|
||||
bool allocate_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb);
|
||||
bool allocate_memory(uint64_t address, size_t size, memory_permission permissions, bool reserve_only = false);
|
||||
bool allocate_memory(uint64_t address, size_t size, nt_memory_permission permissions, bool reserve_only = false);
|
||||
|
||||
bool commit_memory(uint64_t address, size_t size, memory_permission permissions);
|
||||
bool commit_memory(uint64_t address, size_t size, nt_memory_permission permissions);
|
||||
bool decommit_memory(uint64_t address, size_t size);
|
||||
|
||||
bool release_memory(uint64_t address, size_t size);
|
||||
|
||||
void unmap_all_memory();
|
||||
|
||||
uint64_t allocate_memory(size_t size, memory_permission permissions, bool reserve_only = false);
|
||||
uint64_t allocate_memory(size_t size, nt_memory_permission permissions, bool reserve_only = false);
|
||||
|
||||
uint64_t find_free_allocation_base(size_t size, uint64_t start = 0) const;
|
||||
|
||||
@@ -96,9 +96,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, memory_permission permissions) final;
|
||||
void map_memory(uint64_t address, size_t size, nt_memory_permission permissions) final;
|
||||
void unmap_memory(uint64_t address, size_t size) final;
|
||||
void apply_memory_protection(uint64_t address, size_t size, memory_permission permissions) final;
|
||||
void apply_memory_protection(uint64_t address, size_t size, nt_memory_permission permissions) final;
|
||||
|
||||
void update_layout_version();
|
||||
};
|
||||
|
||||
@@ -148,7 +148,7 @@ namespace syscalls
|
||||
|
||||
c.win_emu.callbacks.on_memory_protect(aligned_start, aligned_length, requested_protection);
|
||||
|
||||
memory_permission old_protection_value{};
|
||||
nt_memory_permission old_protection_value{};
|
||||
|
||||
try
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user