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 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 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; virtual void restore_registers(const std::vector<std::byte>& register_data) = 0;
// TODO: Remove this // 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 serialize_state(utils::buffer_serializer& buffer, const bool is_snapshot) const override
{ {
(void)buffer; if (is_snapshot)
(void)is_snapshot; {
throw std::runtime_error("Not implemented"); 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 deserialize_state(utils::buffer_deserializer& buffer, const bool is_snapshot) override
{ {
(void)buffer; if (is_snapshot)
(void)is_snapshot; {
throw std::runtime_error("Not implemented"); 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{}; std::vector<std::byte> data{};
auto* accessor = +[](void* user, const void* data, const size_t length) { auto* accessor = +[](void* user, const void* data, const size_t length) {

View File

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