#pragma once #include #include "Utils.h" class RetSpoofInvoker { private: void* gadgetAddress{ 0 }; public: void init(std::uintptr_t gadgetAddress) noexcept { this->gadgetAddress = reinterpret_cast(gadgetAddress); } template ReturnType invokeFastcall(std::uintptr_t functionAddress, Args&&... args) const noexcept { return detail::shellcode_stub_helper::spoof_call(this->gadgetAddress, reinterpret_cast(functionAddress), std::forward(args)...); } }; inline RetSpoofInvoker invoker;