VoltMod
C++23 framework for CS2 server plugins
Loading...
Searching...
No Matches
KHookForwarder.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4#include <khook.hpp>
5
6namespace VoltMod
7{
8
9/**
10 * @brief The loader's KHook, which every module's hooks go through.
11 *
12 * No per-module bookkeeping: each hook is removed by the subscription that owns it.
13 */
14class KHookForwarder final : public KHook::IKHook
15{
16public:
17 KHook::HookID_t SetupHook(void* function, void* context, void* removedFunction, void* pre, void* post,
18 void* makeReturn, void* makeCallOriginal, unsigned int stackSize, bool async) override
19 {
21 async);
22 }
23
24 KHook::HookID_t SetupVirtualHook(void** vtable, int index, void* context, void* removedFunction, void* pre,
25 void* post, void* makeReturn, void* makeCallOriginal, unsigned int stackSize,
26 bool async) override
27 {
28 return KHook::SetupVirtualHook(vtable, index, context, removedFunction, pre, post, makeReturn, makeCallOriginal,
30 }
31
32 void RemoveHook(KHook::HookID_t id, bool async, void (*removed)(KHook::HookID_t, void*), void* context) override
33 {
34 KHook::RemoveHook(id, async, removed, context);
35 }
36
37 void* GetContextPtr() override { return KHook::GetContextPtr(); }
38 void* GetOriginalFunction() override { return KHook::GetOriginalFunction(); }
39 void* GetOriginalValuePtr() override { return KHook::GetOriginalValuePtr(); }
40 void* GetOverrideValuePtr() override { return KHook::GetOverrideValuePtr(); }
41 void* GetCurrentValuePtr(bool pop) override { return KHook::GetCurrentValuePtr(pop); }
42 void DestroyReturnValue() override { KHook::DestroyReturnValue(); }
43 void* FindOriginal(void* function) override { return KHook::FindOriginal(function); }
44 void* FindOriginalVirtual(void** vtable, int index) override { return KHook::FindOriginalVirtual(vtable, index); }
45
46 void* DoRecall(KHook::Action action, void* returnValue, std::size_t returnSize, void* construct,
47 void* destruct) override
48 {
49 return KHook::DoRecall(action, returnValue, returnSize, construct, destruct);
50 }
51
52 void SaveReturnValue(KHook::Action action, void* returnValue, std::size_t returnSize, void* construct,
53 void* destruct, bool original) override
54 {
55 KHook::SaveReturnValue(action, returnValue, returnSize, construct, destruct, original);
56 }
57
58 void* LookupSignature(void* start, std::size_t size, const char* signature) override
59 {
60 return KHook::LookupSignature(start, size, signature);
61 }
62
63 bool WasOriginalFunctionSkipped() override { return KHook::WasOriginalFunctionSkipped(); }
64};
65
66} // namespace VoltMod
The loader's KHook, which every module's hooks go through.
void * GetCurrentValuePtr(bool pop) override
void DestroyReturnValue() override
void * GetOriginalValuePtr() override
void * LookupSignature(void *start, std::size_t size, const char *signature) override
void SaveReturnValue(KHook::Action action, void *returnValue, std::size_t returnSize, void *construct, void *destruct, bool original) override
void * GetOverrideValuePtr() override
bool WasOriginalFunctionSkipped() override
void * FindOriginalVirtual(void **vtable, int index) override
void * GetOriginalFunction() override
KHook::HookID_t SetupHook(void *function, void *context, void *removedFunction, void *pre, void *post, void *makeReturn, void *makeCallOriginal, unsigned int stackSize, bool async) override
void * DoRecall(KHook::Action action, void *returnValue, std::size_t returnSize, void *construct, void *destruct) override
KHook::HookID_t SetupVirtualHook(void **vtable, int index, void *context, void *removedFunction, void *pre, void *post, void *makeReturn, void *makeCallOriginal, unsigned int stackSize, bool async) override
void * GetContextPtr() override
void RemoveHook(KHook::HookID_t id, bool async, void(*removed)(KHook::HookID_t, void *), void *context) override
void * FindOriginal(void *function) override
static std::string ReadFile(const std::filesystem::path &path)
Definition Loader.cpp:56