#pragma once #include #include #define CALL_ORIG_FUNC(func) Compat::g_origFuncPtr<&func> #define HOOK_FUNCTION(module, func, newFunc) \ Compat::hookFunction<&func>(#module, #func, &newFunc) #define HOOK_SHIM_FUNCTION(func, newFunc) \ Compat::hookFunction(reinterpret_cast(Compat::g_origFuncPtr<&func>), newFunc, #func) namespace Compat { void closeDbgEng(); std::string funcPtrToStr(void* funcPtr); HMODULE getModuleHandleFromAddress(void* address); template decltype(origFunc) g_origFuncPtr = origFunc; template std::string g_origFuncName; FARPROC getProcAddress(HMODULE module, const char* procName); void hookFunction(void*& origFuncPtr, void* newFuncPtr, const char* funcName); void hookFunction(HMODULE module, const char* funcName, void*& origFuncPtr, void* newFuncPtr); void hookFunction(const char* moduleName, const char* funcName, void*& origFuncPtr, void* newFuncPtr); void hookIatFunction(HMODULE module, const char* funcName, void* newFuncPtr); template void hookFunction(const char* moduleName, const char* funcName, decltype(origFunc) newFuncPtr) { g_origFuncName = funcName; hookFunction(moduleName, funcName, reinterpret_cast(g_origFuncPtr), newFuncPtr); } void removeShim(HMODULE module, const char* funcName); }