2019-03-21 20:18:31 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
namespace big
|
|
|
|
{
|
|
|
|
class detour_hook
|
|
|
|
{
|
|
|
|
public:
|
2022-10-30 19:32:51 +01:00
|
|
|
explicit detour_hook(std::string name, void* detour);
|
|
|
|
explicit detour_hook(std::string name, void *target, void* detour);
|
2019-03-21 20:18:31 +01:00
|
|
|
~detour_hook() noexcept;
|
|
|
|
|
|
|
|
detour_hook(detour_hook&& that) = delete;
|
|
|
|
detour_hook& operator=(detour_hook&& that) = delete;
|
|
|
|
detour_hook(detour_hook const&) = delete;
|
|
|
|
detour_hook& operator=(detour_hook const&) = delete;
|
|
|
|
|
2022-10-30 19:32:51 +01:00
|
|
|
void set_target_and_create_hook(void* target);
|
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
void enable();
|
|
|
|
void disable();
|
|
|
|
|
|
|
|
template <typename T>
|
2022-10-30 19:32:51 +01:00
|
|
|
T get_original()
|
|
|
|
{
|
|
|
|
return static_cast<T>(m_original);
|
|
|
|
}
|
2019-03-21 20:18:31 +01:00
|
|
|
|
|
|
|
void fix_hook_address();
|
2022-10-30 19:32:51 +01:00
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
private:
|
2022-10-30 19:32:51 +01:00
|
|
|
void create_hook();
|
|
|
|
|
2019-03-21 20:18:31 +01:00
|
|
|
std::string m_name;
|
|
|
|
void *m_original{};
|
2022-10-30 19:32:51 +01:00
|
|
|
void* m_target{};
|
|
|
|
void* m_detour{};
|
2019-03-21 20:18:31 +01:00
|
|
|
};
|
|
|
|
}
|