Implement serialization

This commit is contained in:
momo5502
2025-04-01 20:07:26 +02:00
parent 31464c1c68
commit bdf5d60fd9
3 changed files with 16 additions and 9 deletions

View File

@@ -15,7 +15,7 @@ struct cpu_interface
virtual size_t read_raw_register(int reg, void* value, size_t size) = 0;
virtual size_t write_raw_register(int reg, const void* value, size_t size) = 0;
virtual std::vector<std::byte> save_registers() = 0;
virtual std::vector<std::byte> save_registers() const = 0;
virtual void restore_registers(const std::vector<std::byte>& register_data) = 0;
// TODO: Remove this

View File

@@ -285,19 +285,26 @@ namespace icicle
void serialize_state(utils::buffer_serializer& buffer, const bool is_snapshot) const override
{
(void)buffer;
(void)is_snapshot;
throw std::runtime_error("Not implemented");
if (is_snapshot)
{
throw std::runtime_error("Not implemented");
}
buffer.write_vector(this->save_registers());
}
void deserialize_state(utils::buffer_deserializer& buffer, const bool is_snapshot) override
{
(void)buffer;
(void)is_snapshot;
throw std::runtime_error("Not implemented");
if (is_snapshot)
{
throw std::runtime_error("Not implemented");
}
const auto data = buffer.read_vector<std::byte>();
this->restore_registers(data);
}
std::vector<std::byte> save_registers() override
std::vector<std::byte> save_registers() const override
{
std::vector<std::byte> data{};
auto* accessor = +[](void* user, const void* data, const size_t length) {

View File

@@ -647,7 +647,7 @@ namespace unicorn
serializer.deserialize(buffer);
}
std::vector<std::byte> save_registers() override
std::vector<std::byte> save_registers() const override
{
utils::buffer_serializer buffer{};
const uc_context_serializer serializer(this->uc_, false);