mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-26 07:01:02 +00:00
Support SGDT hooking
This commit is contained in:
@@ -50,6 +50,7 @@ enum class x86_hookable_instructions
|
||||
cpuid,
|
||||
rdtsc,
|
||||
rdtscp,
|
||||
sgdt,
|
||||
};
|
||||
|
||||
// --[x86_64]-------------------------------------------------------------------------
|
||||
|
||||
@@ -38,7 +38,8 @@ struct basic_block
|
||||
using edge_generation_hook_callback = std::function<void(const basic_block& current_block, const basic_block& previous_block)>;
|
||||
using basic_block_hook_callback = std::function<void(const basic_block& block)>;
|
||||
|
||||
using instruction_hook_callback = std::function<instruction_hook_continuation()>;
|
||||
using simple_instruction_hook_callback = std::function<instruction_hook_continuation()>;
|
||||
using instruction_hook_callback = std::function<instruction_hook_continuation(uint64_t data)>;
|
||||
using interrupt_hook_callback = std::function<void(int interrupt)>;
|
||||
|
||||
using memory_access_hook_callback = std::function<void(uint64_t address, const void* data, size_t size)>;
|
||||
|
||||
@@ -81,6 +81,13 @@ class typed_emulator : public emulator
|
||||
return this->hook_instruction(static_cast<int>(instruction_type), std::move(callback));
|
||||
}
|
||||
|
||||
emulator_hook* hook_instruction(hookable_instructions instruction_type, simple_instruction_hook_callback callback)
|
||||
{
|
||||
return this->hook_instruction(instruction_type, [c = std::move(callback)](const uint64_t) {
|
||||
return c(); //
|
||||
});
|
||||
}
|
||||
|
||||
private:
|
||||
emulator_hook* hook_instruction(int instruction_type, instruction_hook_callback callback) override = 0;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user