25 #include <BlackBone/Patterns/PatternSearch.h>
26 #include <BlackBone/Process/Process.h>
27 #include <BlackBone/Process/RPC/RemoteFunction.hpp>
43 template<
typename R,
typename... Args>
44 class RemoteFunctionFastcall<R ( __fastcall* )(Args...)> :
public blackbone::RemoteFunctionBase<blackbone::cc_fastcall, R, Args...>
47 using RemoteFunctionBase::RemoteFunctionBase;
49 RemoteFunctionFastcall( blackbone::Process& proc, R( __fastcall* ptr )(Args...), blackbone::ThreadPtr boundThread =
nullptr )
50 : blackbone::RemoteFunctionBase( proc,
reinterpret_cast<ptr_t
>(ptr), boundThread )
65 template <
typename ElemT,
typename IntPtrT>
69 typedef IntPtrT VectorPtr;
70 typedef IntPtrT DataPtr;
72 typedef VectorPtr (__fastcall *VECTOR_NEW)(uint32_t cap);
73 typedef void (__fastcall *VECTOR_FREE)(VectorPtr v);
74 typedef void (__fastcall *VECTOR_ADD)(VectorPtr v, ElemT elem);
75 typedef void (__fastcall *VECTOR_CLEAR)(VectorPtr v);
76 typedef uint32_t (__fastcall *VECTOR_LENGTH)(VectorPtr v);
77 typedef uint32_t (__fastcall *VECTOR_CAPACITY)(VectorPtr v);
78 typedef DataPtr (__fastcall *VECTOR_DATA)(VectorPtr v);
80 typedef void (__fastcall *VECTOR_GROW)(VectorPtr v, uint32_t);
84 blackbone::ptr_t vectorNew;
85 blackbone::ptr_t vectorFree;
86 blackbone::ptr_t vectorAdd;
87 blackbone::ptr_t vectorClear;
88 blackbone::ptr_t vectorLength;
89 blackbone::ptr_t vectorCapacity;
90 blackbone::ptr_t vectorData;
92 blackbone::ptr_t vectorGrow;
97 VECTOR_FREE vectorFree;
99 VECTOR_CLEAR vectorClear;
100 VECTOR_LENGTH vectorLength;
101 VECTOR_CAPACITY vectorCapacity;
102 VECTOR_DATA vectorData;
104 VECTOR_GROW vectorGrow;
131 void inject(blackbone::Process* process);
134 VectorAPI& getAPI() {
return api; }
136 VectorPtr vectorNew(uint32_t cap = 16);
137 void vectorFree(VectorPtr v);
138 void vectorAdd(VectorPtr v, ElemT elem);
139 void vectorClear(VectorPtr v);
140 uint32_t vectorLength(VectorPtr v);
141 uint32_t vectorCapacity(VectorPtr v);
142 DataPtr vectorData(VectorPtr v);
144 void vectorGrow(VectorPtr v, uint32_t cap);
146 VectorPtr create(
const std::vector<ElemT>& data);
147 void read(VectorPtr v, std::vector<ElemT>& out);
150 blackbone::Process* process;
153 VectorLocalAPI localApi;
154 VectorRemoteAPI* remAPI;
155 blackbone::MemBlock remoteCode;
165 #include "IPCVector_Impl.h"