36 lines
667 B
C++
36 lines
667 B
C++
#pragma once
|
|
|
|
namespace big
|
|
{
|
|
class detour_hook
|
|
{
|
|
public:
|
|
explicit detour_hook(std::string name, void *target, void *detour);
|
|
~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;
|
|
|
|
void enable();
|
|
void disable();
|
|
|
|
template <typename T>
|
|
T get_original();
|
|
|
|
void fix_hook_address();
|
|
private:
|
|
std::string m_name;
|
|
void *m_target;
|
|
void *m_detour;
|
|
void *m_original{};
|
|
};
|
|
|
|
template <typename T>
|
|
inline T detour_hook::get_original()
|
|
{
|
|
return static_cast<T>(m_original);
|
|
}
|
|
}
|