ChatPlexSDK-BS 1.0.1-v6.2.0
C++ ChatPlex BeatSaber SDK
Loading...
Searching...
No Matches
il2cpp_hook.hpp
1#pragma once
2
3#define __CP_SDK_IL2CPP_HOOK_AUTO_INSTALL_ORIG(__mName) \
4 struct Auto_Hook_##__mName \
5 { \
6 Auto_Hook_##__mName() \
7 { \
8 ::CP_SDK::Utils::Hooks::Register(::Hooking::InstallOrigHook<Hook_##__mName>); \
9 } \
10 }; \
11 static Auto_Hook_##__mName Auto_Hook_Instance_##__mName;
12
13#define __CP_SDK_IL2CPP_HOOK_AUTO_INSTALL(__mName) \
14 struct Auto_Hook_##__mName \
15 { \
16 Auto_Hook_##__mName() \
17 { \
18 ::CP_SDK::Utils::Hooks::Register(::Hooking::InstallHook<Hook_##__mName>); \
19 } \
20 }; \
21 static Auto_Hook_##__mName Auto_Hook_Instance_##__mName;
22
25
26#define __CP_SDK_IL2CPP_HOOK_MAKE_AUTO_HOOK_MATCH(__mName, __mPtr, __mRetval, ...) \
27 struct Hook_##__mName \
28 { \
29 using funcType = __mRetval (*)(__VA_ARGS__); \
30 static_assert(std::is_same_v<funcType, ::Hooking::InternalMethodCheck<decltype(__mPtr)>::funcType>, "Hook method signature does not match!"); \
31 constexpr static const char* name() { return #__mName; } \
32 static const MethodInfo* getInfo() { return ::il2cpp_utils::il2cpp_type_check::MetadataGetter<__mPtr>::get(); } \
33 static funcType* trampoline() { return &__mName; } \
34 static inline __mRetval (*__mName)(__VA_ARGS__) = nullptr; \
35 static funcType hook() { return hook_##__mName; } \
36 static __mRetval hook_##__mName(__VA_ARGS__); \
37 }; \
38 __CP_SDK_IL2CPP_HOOK_AUTO_INSTALL(__mName); \
39 __mRetval Hook_##__mName::hook_##__mName(__VA_ARGS__)
40
41#define __CP_SDK_IL2CPP_HOOK_MAKE_AUTO_HOOK_ORIG_MATCH(__mName, __mPtr, __mRetval, ...) \
42 struct Hook_##__mName \
43 { \
44 using funcType = __mRetval (*)(__VA_ARGS__); \
45 static_assert(std::is_same_v<funcType, ::Hooking::InternalMethodCheck<decltype(__mPtr)>::funcType>, "Hook method signature does not match!"); \
46 constexpr static const char* name() { return #__mName; } \
47 static const MethodInfo* getInfo() { return ::il2cpp_utils::il2cpp_type_check::MetadataGetter<__mPtr>::get(); } \
48 static funcType* trampoline() { return &__mName; } \
49 static inline __mRetval (*__mName)(__VA_ARGS__) = nullptr; \
50 static funcType hook() { return hook_##__mName; } \
51 static __mRetval hook_##__mName(__VA_ARGS__); \
52 }; \
53 __CP_SDK_IL2CPP_HOOK_AUTO_INSTALL_ORIG(__mName); \
54 __mRetval Hook_##__mName::hook_##__mName(__VA_ARGS__)