Prepare threading by saving/restoring registers

This commit is contained in:
momo5502
2024-10-14 18:00:21 +02:00
parent ed9c731d0f
commit b756bf354f
2 changed files with 18 additions and 0 deletions

View File

@@ -64,6 +64,9 @@ public:
virtual void read_raw_register(int reg, void* value, size_t size) = 0;
virtual void write_raw_register(int reg, const void* value, size_t size) = 0;
virtual std::vector<std::byte> save_registers() = 0;
virtual void restore_registers(const std::vector<std::byte>& register_data) = 0;
virtual emulator_hook* hook_memory_violation(uint64_t address, size_t size,
memory_violation_hook_callback callback) = 0;

View File

@@ -586,6 +586,21 @@ namespace unicorn
serializer.deserialize(buffer);
}
std::vector<std::byte> save_registers() override
{
utils::buffer_serializer buffer{};
const uc_context_serializer serializer(this->uc_, false);
serializer.serialize(buffer);
return buffer.move_buffer();
}
void restore_registers(const std::vector<std::byte>& register_data) override
{
utils::buffer_deserializer buffer{register_data};
const uc_context_serializer serializer(this->uc_, false);
serializer.deserialize(buffer);
}
private:
mutable bool has_snapshots_{false};
uc_engine* uc_{};