22 #include "../config.h"
25 #include <type_traits>
26 #include <BlackBone/Process/Process.h>
27 #include <BlackBone/Process/RPC/RemoteFunction.hpp>
37 template <
typename RetT,
typename... ArgsT>
42 typedef std::tuple<ArgsT...> ArgsTuple;
44 typedef RetT (*Func)(ArgsT...);
45 typedef blackbone::RemoteFunction<Func> RemoteFunc;
49 RMonoAPIFunctionSimple(blackbone::Process& proc, blackbone::ptr_t addr, blackbone::ThreadPtr boundThread =
nullptr)
50 : process(&process), addr(addr), boundThread(boundThread), f(
nullptr)
65 boundThread =
nullptr;
69 void rebuild(blackbone::Process& proc, blackbone::ptr_t addr, blackbone::ThreadPtr boundThread =
nullptr)
71 this->process = &proc;
73 this->boundThread = boundThread;
77 blackbone::ptr_t getAddress()
const {
return addr; }
79 operator bool()
const {
return f !=
nullptr; }
81 RetT operator()(ArgsT... args)
85 if constexpr(!std::is_same_v<RetT, void>) {
86 return *f->Call(
typename RemoteFunc::CallArguments(args...), boundThread);
88 f->Call(
typename RemoteFunc::CallArguments(args...), boundThread);
93 void rebuildRemoteFunc()
96 f =
new RemoteFunc(*process, addr);
100 blackbone::Process* process;
101 blackbone::ptr_t addr;
102 blackbone::ThreadPtr boundThread;