mirror of
https://github.com/EricPlayZ/EGameTools.git
synced 2026-10-10 21:03:03 +08:00
39 lines
969 B
C++
39 lines
969 B
C++
#pragma once
|
|
#include <Windows.h>
|
|
#include <functional>
|
|
|
|
namespace Hook {
|
|
struct DETOUR_INFO {
|
|
LPVOID target;
|
|
LPVOID hookedFunc;
|
|
PDWORD64 jmpBack;
|
|
std::vector<BYTE> oBytes;
|
|
std::vector<BYTE> patchedBytes;
|
|
|
|
DETOUR_INFO() = default;
|
|
DETOUR_INFO(LPVOID pTarget, LPVOID pHookedFunc) {
|
|
target = pTarget;
|
|
hookedFunc = pHookedFunc;
|
|
jmpBack = nullptr;
|
|
}
|
|
};
|
|
|
|
extern void VTHook(LPVOID instance, LPVOID pDetour, LPVOID* ppOriginal, const DWORD offset);
|
|
|
|
extern DETOUR_INFO MidFuncHook(LPVOID pTarget, LPVOID hookedFunc, const size_t nops = 0, const size_t bytesToSkip = 0);
|
|
|
|
class BreakpointHook {
|
|
private:
|
|
PDWORD64 m_addr;
|
|
BYTE m_originalBytes;
|
|
std::function<void(PEXCEPTION_POINTERS)> m_handler;
|
|
DWORD m_originalProtection;
|
|
|
|
static long WINAPI OnException(PEXCEPTION_POINTERS info);
|
|
public:
|
|
BreakpointHook(PDWORD64 addr, std::function<void(PEXCEPTION_POINTERS)> handler);
|
|
void Enable();
|
|
void Disable();
|
|
~BreakpointHook();
|
|
};
|
|
} |