mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-11 16:46:16 +00:00
Introduce try_write_memory for the memory manager
This commit is contained in:
@@ -264,9 +264,14 @@ namespace icicle
|
||||
ice(res, "Failed to read memory");
|
||||
}
|
||||
|
||||
bool try_write_memory(const uint64_t address, const void* data, const size_t size) override
|
||||
{
|
||||
return icicle_write_memory(this->emu_, address, data, size);
|
||||
}
|
||||
|
||||
void write_memory(const uint64_t address, const void* data, const size_t size) override
|
||||
{
|
||||
const auto res = icicle_write_memory(this->emu_, address, data, size);
|
||||
const auto res = try_write_memory(address, data, size);
|
||||
ice(res, "Failed to write memory");
|
||||
}
|
||||
|
||||
|
||||
@@ -380,6 +380,11 @@ namespace unicorn
|
||||
uce(uc_mem_read(*this, address, data, size));
|
||||
}
|
||||
|
||||
bool try_write_memory(const uint64_t address, const void* data, const size_t size) override
|
||||
{
|
||||
return uc_mem_write(*this, address, data, size) == UC_ERR_OK;
|
||||
}
|
||||
|
||||
void write_memory(const uint64_t address, const void* data, const size_t size) override
|
||||
{
|
||||
uce(uc_mem_write(*this, address, data, size));
|
||||
|
||||
@@ -19,6 +19,7 @@ class memory_interface
|
||||
virtual void read_memory(uint64_t address, void* data, size_t size) const = 0;
|
||||
virtual bool try_read_memory(uint64_t address, void* data, size_t size) const = 0;
|
||||
virtual void write_memory(uint64_t address, const void* data, size_t size) = 0;
|
||||
virtual bool try_write_memory(uint64_t address, const void* data, size_t size) = 0;
|
||||
|
||||
private:
|
||||
virtual void map_mmio(uint64_t address, size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb) = 0;
|
||||
|
||||
@@ -649,6 +649,11 @@ void memory_manager::write_memory(const uint64_t address, const void* data, cons
|
||||
this->memory_->write_memory(address, data, size);
|
||||
}
|
||||
|
||||
bool memory_manager::try_write_memory(const uint64_t address, const void* data, const size_t size)
|
||||
{
|
||||
return this->memory_->try_write_memory(address, data, size);
|
||||
}
|
||||
|
||||
void memory_manager::map_mmio(const uint64_t address, const size_t size, mmio_read_callback read_cb, mmio_write_callback write_cb)
|
||||
{
|
||||
this->memory_->map_mmio(address, size, std::move(read_cb), std::move(write_cb));
|
||||
|
||||
@@ -65,6 +65,7 @@ class memory_manager : public memory_interface
|
||||
void read_memory(uint64_t address, void* data, size_t size) const final;
|
||||
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 try_write_memory(uint64_t address, const void* data, size_t size) final;
|
||||
|
||||
bool protect_memory(uint64_t address, size_t size, nt_memory_permission permissions, nt_memory_permission* old_permissions = nullptr);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user