Introduce try_write_memory for the memory manager

This commit is contained in:
66hh
2025-12-28 19:36:40 +08:00
parent 020e7ca3f6
commit f95081cb6e
5 changed files with 18 additions and 1 deletions

View File

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

View File

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

View File

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

View File

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

View File

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