diff --git a/src/emulator/cpu_interface.hpp b/src/emulator/cpu_interface.hpp index 83dce7e8..6db2fc05 100644 --- a/src/emulator/cpu_interface.hpp +++ b/src/emulator/cpu_interface.hpp @@ -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 save_registers() = 0; + virtual std::vector save_registers() const = 0; virtual void restore_registers(const std::vector& register_data) = 0; // TODO: Remove this diff --git a/src/icicle-emulator/icicle_x64_emulator.cpp b/src/icicle-emulator/icicle_x64_emulator.cpp index 53b45139..42e84d93 100644 --- a/src/icicle-emulator/icicle_x64_emulator.cpp +++ b/src/icicle-emulator/icicle_x64_emulator.cpp @@ -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(); + this->restore_registers(data); } - std::vector save_registers() override + std::vector save_registers() const override { std::vector data{}; auto* accessor = +[](void* user, const void* data, const size_t length) { diff --git a/src/unicorn-emulator/unicorn_x64_emulator.cpp b/src/unicorn-emulator/unicorn_x64_emulator.cpp index 029ad15e..7e785d18 100644 --- a/src/unicorn-emulator/unicorn_x64_emulator.cpp +++ b/src/unicorn-emulator/unicorn_x64_emulator.cpp @@ -647,7 +647,7 @@ namespace unicorn serializer.deserialize(buffer); } - std::vector save_registers() override + std::vector save_registers() const override { utils::buffer_serializer buffer{}; const uc_context_serializer serializer(this->uc_, false);