3#include <dynamic_libs/os_types.h>
5#include <telkin/Preprocessor.h>
79 #define tMangle(...) PP_STR(__VA_ARGS__)
81 #define tMangle(...) __builtin_mangle(__VA_ARGS__)
85#define _tBranch3(addr, target, type)
86 tk::BranchHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::BranchHook(tk::DataMagic::BranchHook, reinterpret_cast<u32*>(addr), tMangle(target), type, nullptr, 0
, 0
, 0
)
89#define _tBranch4(addr, target, sig, type)
90 tk::BranchHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::BranchHook(tk::DataMagic::BranchHook, reinterpret_cast<u32*>(addr), tMangle(target, sig), type, nullptr, 0
, 0
, 0
)
93 PP_CONCAT_VAL(_tBranch, PP_NARG(__VA_ARGS__))(__VA_ARGS__)
96#define _tBranchPin4(addr, target, type, titleid)
97 const u64 _tPin_ ## addr = titleid;
98 tk::BranchHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::BranchHook(tk::DataMagic::BranchHook, reinterpret_cast<u32*>(addr), tMangle(target), type, &_tPin_ ## addr, 0
, 0
, 0
)
101#define _tBranchPin5(addr, target, sig, type, titleid)
102 const u64 _tPin_ ## addr = titleid;
103 tk::BranchHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::BranchHook(tk::DataMagic::BranchHook, reinterpret_cast<u32*>(addr), tMangle(target, sig), type, &_tPin_ ## addr, 0
, 0
, 0
)
105#define tBranchPin(...)
106 PP_CONCAT_VAL(_tBranchPin, PP_NARG(__VA_ARGS__))(__VA_ARGS__)
109#define tBranchEx(addr, targetSym, type)
110 tk::BranchHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::BranchHook(tk::DataMagic::BranchHook, reinterpret_cast<u32*>(addr), targetSym, type, nullptr, 0
, 0
, 0
)
113#define tBranchPinEx(addr, targetSym, type, titleid)
114 const u64 _tPin_ ## addr = titleid;
115 tk::BranchHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::BranchHook(tk::DataMagic::BranchHook, reinterpret_cast<u32*>(addr), targetSym, type, &_tPin_ ## addr, 0
, 0
, 0
)
118#define _tPointerCode2(addr, target)
119 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), tMangle(target), false, nullptr, 0
, 0
, 0
)
122#define _tPointerCode3(addr, target, sig)
123 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), tMangle(target, sig), false, nullptr, 0
, 0
, 0
)
125#define tPointerCode(...)
126 PP_CONCAT_VAL(_tPointerCode, PP_NARG(__VA_ARGS__))(__VA_ARGS__)
129#define _tPointerCodePin3(addr, target, titleid)
130 const u64 _tPin_ ## addr = titleid;
131 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), tMangle(target), false, &_tPin_ ## addr, 0
, 0
, 0
)
134#define _tPointerCodePin4(addr, target, sig)
135 const u64 _tPin_ ## addr = titleid;
136 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), tMangle(target, sig), false, &_tPin_ ## addr, 0
, 0
, 0
)
138#define tPointerCode(...)
139 PP_CONCAT_VAL(_tPointerCode, PP_NARG(__VA_ARGS__))(__VA_ARGS__)
141#define tPointerCodePin(...)
142 PP_CONCAT_VAL(_tPointerCodePin, PP_NARG(__VA_ARGS__))(__VA_ARGS__)
144#define tPointerData(addr, target)
145 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), tMangle(target), true, nullptr, 0
, 0
, 0
)
148#define tPointerEx(addr, targetSym, isdata)
149 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), targetSym, isdata, nullptr, 0
, 0
, 0
)
152#define tPointerPinEx(addr, targetSym, isdata, titleid)
153 const u64 _tPin_ ## addr = titleid;
154 tk::PointerHook _tHook_ ## addr __attribute__((section(".loaderdata"))) = tk::PointerHook(tk::DataMagic::PointerHook, reinterpret_cast<u32*>(addr), targetSym, isdata, &_tPin_ ## addr, 0
, 0
, 0
)
156 #define _tPatch_u(addr, bits, ...)
157 const u##bits _tPatch_Data_ ## addr [] = { __VA_ARGS__ };
158 tk::PatchHook _tPatch_ ## addr __attribute__((section(".loaderdata"))) = tk::PatchHook(tk::DataMagic::PatchHook, reinterpret_cast<u32*>(addr), sizeof(_tPatch_Data_##addr) / sizeof(u##bits), bits, reinterpret_cast<const void*>(&_tPatch_Data_##addr), nullptr, 0
, 0
, 0
)
160#define _tPatch_s(addr, bits, ...)
161 const s##bits _tPatch_Data_ ## addr [] = { __VA_ARGS__ };
162 tk::PatchHook _tPatch_ ## addr __attribute__((section(".loaderdata"))) = tk::PatchHook(tk::DataMagic::PatchHook, reinterpret_cast<u32*>(addr), sizeof(_tPatch_Data_##addr) / sizeof(u##bits), bits, reinterpret_cast<const void*>(&_tPatch_Data_##addr), nullptr, 0
, 0
, 0
)
164#define _tPatch_f(addr, bits, ...)
165 const f##bits _tPatch_Data_ ## addr [] = { __VA_ARGS__ };
166 tk::PatchHook _tPatch_ ## addr __attribute__((section(".loaderdata"))) = tk::PatchHook(tk::DataMagic::PatchHook, reinterpret_cast<u32*>(addr), sizeof(_tPatch_Data_##addr) / sizeof(u##bits), bits, reinterpret_cast<const void*>(&_tPatch_Data_##addr), nullptr, 0
, 0
, 0
)
168#define _tPatchPin_u(addr, bits, titleid, ...)
169 const u##bits _tPatch_Data_ ## addr [] = { __VA_ARGS__ };
170 const u64 _tPin_ ## addr = titleid;
171 tk::PatchHook _tPatch_ ## addr __attribute__((section(".loaderdata"))) = tk::PatchHook(tk::DataMagic::PatchHook, reinterpret_cast<u32*>(addr), sizeof(_tPatch_Data_##addr) / sizeof(u##bits), bits, reinterpret_cast<const void*>(&_tPatch_Data_##addr), &_tPin_ ## addr, 0
, 0
, 0
)
173#define _tPatchPin_s(addr, bits, titleid, ...)
174 const s##bits _tPatch_Data_ ## addr [] = { __VA_ARGS__ };
175 const u64 _tPin_ ## addr = titleid;
176 tk::PatchHook _tPatch_ ## addr __attribute__((section(".loaderdata"))) = tk::PatchHook(tk::DataMagic::PatchHook, reinterpret_cast<u32*>(addr), sizeof(_tPatch_Data_##addr) / sizeof(u##bits), bits, reinterpret_cast<const void*>(&_tPatch_Data_##addr), &_tPin_ ## addr, 0
, 0
, 0
)
178#define _tPatchPin_f(addr, bits, titleid, ...)
179 const f##bits _tPatch_Data_ ## addr [] = { __VA_ARGS__ };
180 const u64 _tPin_ ## addr = titleid;
181 tk::PatchHook _tPatch_ ## addr __attribute__((section(".loaderdata"))) = tk::PatchHook(tk::DataMagic::PatchHook, reinterpret_cast<u32*>(addr), sizeof(_tPatch_Data_##addr) / sizeof(u##bits), bits, reinterpret_cast<const void*>(&_tPatch_Data_##addr), &_tPin_ ## addr, 0
, 0
, 0
)
183#define tPatch8u(addr, ...) _tPatch_u(addr, 8
, __VA_ARGS__)
184#define tPatch16u(addr, ...) _tPatch_u(addr, 16
, __VA_ARGS__)
185#define tPatch32u(addr, ...) _tPatch_u(addr, 32
, __VA_ARGS__)
186#define tPatch64u(addr, ...) _tPatch_u(addr, 64
, __VA_ARGS__)
188#define tPatch8s(addr, ...) _tPatch_s(addr, 8
, __VA_ARGS__)
189#define tPatch16s(addr, ...) _tPatch_s(addr, 16
, __VA_ARGS__)
190#define tPatch32s(addr, ...) _tPatch_s(addr, 32
, __VA_ARGS__)
191#define tPatch64s(addr, ...) _tPatch_s(addr, 64
, __VA_ARGS__)
193#define tPatch32f(addr, ...) _tPatch_f(addr, 32
, __VA_ARGS__)
194#define tPatch64f(addr, ...) _tPatch_f(addr, 64
, __VA_ARGS__)
199#define tPatchPin8u(addr, titleid, ...) _tPatchPin_u(addr, 8
, titleid, __VA_ARGS__)
200#define tPatchPin16u(addr, titleid, ...) _tPatchPin_u(addr, 16
, titleid, __VA_ARGS__)
201#define tPatchPin32u(addr, titleid, ...) _tPatchPin_u(addr, 32
, titleid, __VA_ARGS__)
202#define tPatchPin64u(addr, titleid, ...) _tPatchPin_u(addr, 64
, titleid, __VA_ARGS__)
204#define tPatchPin8s(addr, titleid, ...) _tPatchPin_s(addr, 8
, titleid, __VA_ARGS__)
205#define tPatchPin16s(addr, titleid, ...) _tPatchPin_s(addr, 16
, titleid, __VA_ARGS__)
206#define tPatchPin32s(addr, titleid, ...) _tPatchPin_s(addr, 32
, titleid, __VA_ARGS__)
207#define tPatchPin64s(addr, titleid, ...) _tPatchPin_s(addr, 64
, titleid, __VA_ARGS__)
209#define tPatchPin32f(addr, titleid, ...) _tPatchPin_f(addr, 32
, titleid, __VA_ARGS__)
210#define tPatchPin64f(addr, titleid, ...) _tPatchPin_f(addr, 64
, titleid, __VA_ARGS__)
212#define tPatchPinNop(addr, titleid) tPatchPin32u(addr, titleid, 0x60000000
)
213#define tPatchPinBlr(addr, titleid) tPatchPin32u(addr, titleid, 0x4E800020
)
#define tPatchPin32u(addr, titleid,...)
Definition Hooks.h:201
#define tPatch32u(addr,...)
Definition Hooks.h:185
#define tMangle(...)
Definition Hooks.h:81
#define _tPatch_s(addr, bits,...)
Definition Hooks.h:160
#define _tPatchPin_f(addr, bits, titleid,...)
Definition Hooks.h:178
#define _tPatchPin_u(addr, bits, titleid,...)
Definition Hooks.h:168
#define _tPatchPin_s(addr, bits, titleid,...)
Definition Hooks.h:173
#define _tPatch_f(addr, bits,...)
Definition Hooks.h:164
#define _tPatch_u(addr, bits,...)
Definition Hooks.h:156
DataMagic
Definition Hooks.h:8
@ PointerHook
Definition Hooks.h:10
@ NullHook
Definition Hooks.h:12
@ PatchHook
Definition Hooks.h:11
@ BranchHook
Definition Hooks.h:9
u64(*)() getTitleID_t
Definition Mod.h:16
constexpr int cHookSize
Definition Hooks.h:15
BranchType
Definition Hooks.h:17
@ bl
Definition Hooks.h:19
const char * target
Definition Hooks.h:25
u32 reserved3
Definition Hooks.h:29
BranchType type
Definition Hooks.h:26
u32 reserved2
Definition Hooks.h:28
DataMagic magic
Definition Hooks.h:23
u32 * source
Definition Hooks.h:24
const u64 * titleID
Definition Hooks.h:27
u32 reserved4
Definition Hooks.h:30
DataMagic magic
Definition Hooks.h:69
u8 padding[cHookSize - sizeof(DataMagic)]
Definition Hooks.h:70
DataMagic magic
Definition Hooks.h:53
void * addr
Definition Hooks.h:54
u16 dataSize
Definition Hooks.h:56
u32 reserved2
Definition Hooks.h:59
const u64 * titleID
Definition Hooks.h:58
u32 reserved3
Definition Hooks.h:60
u16 count
Definition Hooks.h:55
u32 reserved4
Definition Hooks.h:61
const void * data
Definition Hooks.h:57
DataMagic magic
Definition Hooks.h:38
u32 reserved4
Definition Hooks.h:45
u32 isData
Definition Hooks.h:41
const char * target
Definition Hooks.h:40
u32 * source
Definition Hooks.h:39
u32 reserved3
Definition Hooks.h:44
const u64 * titleID
Definition Hooks.h:42
u32 reserved2
Definition Hooks.h:43