22 #include "../config.h"
25 #include <string_view>
26 #include <unordered_set>
27 #include <BlackBone/Process/Process.h>
28 #include "RMonoTypes.h"
29 #include "RMonoAPIFunctionSimple_Def.h"
30 #include "RMonoAPIFunction_Def.h"
31 #include "RMonoAPIFunctionTypeAdapters.h"
32 #include "../IPCVector.h"
34 #include "visit_struct/visit_struct_intrusive.hpp"
35 #include "abi/RMonoABITypeTraits.h"
40 #define REMOTEMONO_API_PART_BEGIN(structname, part) \
41 struct structname ## Part ## part { \
42 BEGIN_VISITABLES(structname ## Part ## part);
43 #define REMOTEMONO_API_PART_END() \
47 #define REMOTEMONO_API_PART_LIST1(structname) structname ## Part1
48 #define REMOTEMONO_API_PART_LIST2(structname) structname ## Part1, structname ## Part2
49 #define REMOTEMONO_API_PART_LIST3(structname) structname ## Part1, structname ## Part2, structname ## Part3
50 #define REMOTEMONO_API_PART_LIST4(structname) structname ## Part1, structname ## Part2, structname ## Part3, structname ## Part4
51 #define REMOTEMONO_API_PART_LIST5(structname) structname ## Part1, structname ## Part2, structname ## Part3, structname ## Part4, structname ## Part5
52 #define REMOTEMONO_API_PART_LISTN(structname, n) REMOTEMONO_API_PART_LIST ## n(structname)
54 #define REMOTEMONO_API_MAIN_DECLARE(structname, nparts) \
55 struct structname : public REMOTEMONO_API_PART_LISTN(structname, nparts) { \
56 using internal_api_parts = PackHelper<REMOTEMONO_API_PART_LISTN(structname, nparts)>; \
59 #define REMOTEMONO_API_FUNCTYPE(required, ret, ...) \
60 RMonoAPIFunction<ABI, required, ret, __VA_ARGS__>
61 #define REMOTEMONO_API(name, required, ret, ...) \
62 VISITABLE(REMOTEMONO_API_FUNCTYPE(required, ret, __VA_ARGS__), name);
64 #define REMOTEMONO_API_SIMPLE_FUNCTYPE(ret, ...) \
65 RMonoAPIFunctionSimple<ret, __VA_ARGS__>
66 #define REMOTEMONO_API_SIMPLE(name, ret, ...) \
67 VISITABLE(REMOTEMONO_API_SIMPLE_FUNCTYPE(ret, __VA_ARGS__), name);
83 template <
typename ABI>
87 REMOTEMONO_ABI_TYPETRAITS_TYPEDEFS(RMonoABITypeTraits<ABI>)
89 template <
typename TypeT>
using ParamOut = tags::ParamOut<TypeT>;
90 template <
typename TypeT>
using ParamInOut = tags::ParamInOut<TypeT>;
91 template <
typename TypeT>
using ParamOvwrInOut = tags::ParamOvwrInOut<TypeT>;
92 template <
typename TypeT>
using ParamException = tags::ParamException<TypeT>;
93 template <
typename TypeT>
using ReturnOwn = tags::ReturnOwn<TypeT>;
95 using string = std::string;
96 using u16string = std::u16string;
97 using u32string = std::u32string;
99 using string_view = std::string_view;
100 using u16string_view = std::u16string_view;
101 using u32string_view = std::u32string_view;
122 REMOTEMONO_API_PART_BEGIN(MonoAPI, 1)
126 REMOTEMONO_API( free,
false,
void, irmono_voidp )
128 REMOTEMONO_API( jit_init,
false, IRMonoDomainPtr, string_view )
129 REMOTEMONO_API( jit_cleanup,
false,
void, IRMonoDomainPtr )
131 REMOTEMONO_API( get_root_domain,
true, IRMonoDomainPtr )
132 REMOTEMONO_API( domain_set,
false, irmono_bool, IRMonoDomainPtr, irmono_bool )
133 REMOTEMONO_API( domain_get,
false, IRMonoDomainPtr )
134 REMOTEMONO_API( domain_foreach,
false,
void, irmono_funcp, irmono_voidp )
135 REMOTEMONO_API( domain_create_appdomain,
false, IRMonoDomainPtr, string_view, string_view )
136 REMOTEMONO_API( domain_assembly_open,
false, IRMonoAssemblyPtr, IRMonoDomainPtr, string_view )
137 REMOTEMONO_API( domain_unload,
false,
void, IRMonoDomainPtr )
138 REMOTEMONO_API( domain_get_friendly_name,
false,
string, IRMonoDomainPtr )
140 REMOTEMONO_API( thread_attach,
true, IRMonoThreadPtr, IRMonoDomainPtr )
141 REMOTEMONO_API( thread_detach,
true,
void, IRMonoThreadPtr )
143 REMOTEMONO_API( assembly_close,
false,
void, IRMonoAssemblyPtr )
144 REMOTEMONO_API( assembly_foreach,
false,
void, irmono_funcp, irmono_voidp )
145 REMOTEMONO_API( assembly_get_image,
false, IRMonoImagePtr, IRMonoAssemblyPtr )
146 REMOTEMONO_API( assembly_get_name,
false, IRMonoAssemblyNamePtr, IRMonoAssemblyPtr )
147 REMOTEMONO_API( assembly_name_new,
false, ReturnOwn<IRMonoAssemblyNamePtr>,
149 REMOTEMONO_API( assembly_name_parse,
false, irmono_bool, string_view, IRMonoAssemblyNamePtr )
150 REMOTEMONO_API( assembly_name_free,
false,
void, IRMonoAssemblyNamePtrRaw )
151 REMOTEMONO_API( assembly_name_get_name,
false, std::string, IRMonoAssemblyNamePtr )
152 REMOTEMONO_API( assembly_name_get_culture,
false, std::string, IRMonoAssemblyNamePtr )
153 REMOTEMONO_API( assembly_name_get_version,
false, uint16_t, IRMonoAssemblyNamePtr, ParamOut<uint16_t>,
154 ParamOut<uint16_t>, ParamOut<uint16_t> )
155 REMOTEMONO_API( stringify_assembly_name,
false, ReturnOwn<string>, IRMonoAssemblyNamePtr )
156 REMOTEMONO_API( assembly_loaded,
false, IRMonoAssemblyPtr, IRMonoAssemblyNamePtr )
158 REMOTEMONO_API( image_get_name,
false,
string, IRMonoImagePtr )
159 REMOTEMONO_API( image_get_filename,
false,
string, IRMonoImagePtr )
160 REMOTEMONO_API( image_get_table_info,
false, IRMonoTableInfoPtr, IRMonoImagePtr, irmono_int )
161 REMOTEMONO_API( table_info_get_rows,
false, irmono_int, IRMonoTableInfoPtr )
162 REMOTEMONO_API( image_rva_map,
false, irmono_voidp, IRMonoImagePtr, uint32_t )
164 REMOTEMONO_API( metadata_decode_row_col,
false, uint32_t, IRMonoTableInfoPtr, irmono_int, irmono_uint )
165 REMOTEMONO_API( metadata_guid_heap,
false, irmono_voidp, IRMonoImagePtr, uint32_t )
166 REMOTEMONO_API( metadata_string_heap,
false,
string, IRMonoImagePtr, uint32_t )
167 REMOTEMONO_API( metadata_blob_heap,
false, irmono_voidp, IRMonoImagePtr, uint32_t )
168 REMOTEMONO_API( metadata_user_string,
false,
string, IRMonoImagePtr, uint32_t )
169 REMOTEMONO_API( metadata_decode_blob_size,
false, uint32_t, irmono_voidp, ParamOut<irmono_voidp> )
171 REMOTEMONO_API( get_object_class,
false, IRMonoClassPtr )
172 REMOTEMONO_API( get_int16_class,
false, IRMonoClassPtr )
173 REMOTEMONO_API( get_int32_class,
false, IRMonoClassPtr )
174 REMOTEMONO_API( get_int64_class,
false, IRMonoClassPtr )
175 REMOTEMONO_API( get_double_class,
false, IRMonoClassPtr )
176 REMOTEMONO_API( get_single_class,
false, IRMonoClassPtr )
177 REMOTEMONO_API( get_string_class,
false, IRMonoClassPtr )
178 REMOTEMONO_API( get_thread_class,
false, IRMonoClassPtr )
179 REMOTEMONO_API( get_uint16_class,
false, IRMonoClassPtr )
180 REMOTEMONO_API( get_uint32_class,
false, IRMonoClassPtr )
181 REMOTEMONO_API( get_uint64_class,
false, IRMonoClassPtr )
182 REMOTEMONO_API( get_void_class,
false, IRMonoClassPtr )
183 REMOTEMONO_API( get_array_class,
false, IRMonoClassPtr )
184 REMOTEMONO_API( get_boolean_class,
false, IRMonoClassPtr )
185 REMOTEMONO_API( get_byte_class,
false, IRMonoClassPtr )
186 REMOTEMONO_API( get_sbyte_class,
false, IRMonoClassPtr )
187 REMOTEMONO_API( get_char_class,
false, IRMonoClassPtr )
188 REMOTEMONO_API( get_exception_class,
false, IRMonoClassPtr )
190 REMOTEMONO_API( class_vtable,
false, IRMonoVTablePtr, IRMonoDomainPtr, IRMonoClassPtr )
191 REMOTEMONO_API( runtime_class_init,
false,
void, IRMonoVTablePtr )
192 REMOTEMONO_API( class_get_parent,
false, IRMonoClassPtr, IRMonoClassPtr )
193 REMOTEMONO_API( class_get_type,
false, IRMonoTypePtr, IRMonoClassPtr )
194 REMOTEMONO_API( class_from_name,
false, IRMonoClassPtr, IRMonoImagePtr, string_view, string_view )
195 REMOTEMONO_API( class_from_mono_type,
false, IRMonoClassPtr, IRMonoTypePtr )
196 REMOTEMONO_API( class_get_name,
false,
string, IRMonoClassPtr )
197 REMOTEMONO_API( class_get_namespace,
false,
string, IRMonoClassPtr )
198 REMOTEMONO_API( class_get_fields,
false, IRMonoClassFieldPtr, IRMonoClassPtr, irmono_voidpp )
199 REMOTEMONO_API( class_get_methods,
false, IRMonoMethodPtr, IRMonoClassPtr, irmono_voidpp )
200 REMOTEMONO_API( class_get_properties,
false, IRMonoPropertyPtr, IRMonoClassPtr, irmono_voidpp )
201 REMOTEMONO_API( class_get_field_from_name,
false, IRMonoClassFieldPtr, IRMonoClassPtr, string_view )
202 REMOTEMONO_API( class_get_method_from_name,
false, IRMonoMethodPtr, IRMonoClassPtr, string_view, irmono_int )
203 REMOTEMONO_API( class_get_property_from_name,
false, IRMonoPropertyPtr, IRMonoClassPtr, string_view )
204 REMOTEMONO_API( class_get_element_class,
false, IRMonoClassPtr, IRMonoClassPtr )
205 REMOTEMONO_API( class_get_flags,
false, uint32_t, IRMonoClassPtr )
206 REMOTEMONO_API( class_get_rank,
false, irmono_int, IRMonoClassPtr )
207 REMOTEMONO_API( class_is_valuetype,
true, irmono_bool, IRMonoClassPtr )
208 REMOTEMONO_API( class_data_size,
false, uint32_t, IRMonoClassPtr )
209 REMOTEMONO_API( class_instance_size,
false, uint32_t, IRMonoClassPtr )
210 REMOTEMONO_API( class_value_size,
true, int32_t, IRMonoClassPtr, ParamOut<uint32_t> )
212 REMOTEMONO_API( type_get_object,
false, IRMonoReflectionTypePtr, IRMonoDomainPtr, IRMonoTypePtr )
213 REMOTEMONO_API( type_get_name,
false, ReturnOwn<string>, IRMonoTypePtr )
214 REMOTEMONO_API( type_get_class,
false, IRMonoClassPtr, IRMonoTypePtr )
215 REMOTEMONO_API( type_get_type,
false, irmono_int, IRMonoTypePtr )
216 REMOTEMONO_API( type_is_byref,
false, irmono_bool, IRMonoTypePtr )
217 REMOTEMONO_API( type_is_pointer,
false, irmono_bool, IRMonoTypePtr )
218 REMOTEMONO_API( type_is_reference,
false, irmono_bool, IRMonoTypePtr )
219 REMOTEMONO_API( type_is_struct,
false, irmono_bool, IRMonoTypePtr )
220 REMOTEMONO_API( type_is_void,
false, irmono_bool, IRMonoTypePtr )
221 REMOTEMONO_API( type_size,
false, irmono_int, IRMonoTypePtr, ParamOut<irmono_int> )
222 REMOTEMONO_API( type_stack_size,
false, irmono_int, IRMonoTypePtr, ParamOut<irmono_int> )
224 REMOTEMONO_API( field_get_name,
false,
string, IRMonoClassFieldPtr )
225 REMOTEMONO_API( field_get_flags,
false, uint32_t, IRMonoClassFieldPtr )
226 REMOTEMONO_API( field_get_parent,
false, IRMonoClassPtr, IRMonoClassFieldPtr )
227 REMOTEMONO_API( field_get_type,
false, IRMonoTypePtr, IRMonoClassFieldPtr )
228 REMOTEMONO_API( field_set_value,
false,
void, IRMonoObjectPtr, IRMonoClassFieldPtr,
Variant )
229 REMOTEMONO_API( field_get_value,
false,
void, IRMonoObjectPtr, IRMonoClassFieldPtr, ParamOut<Variant> )
230 REMOTEMONO_API( field_get_value_object,
false, IRMonoObjectPtr, IRMonoDomainPtr, IRMonoClassFieldPtr, IRMonoObjectPtr )
231 REMOTEMONO_API( field_static_set_value,
false,
void, IRMonoVTablePtr, IRMonoClassFieldPtr,
Variant )
232 REMOTEMONO_API( field_static_get_value,
false,
void, IRMonoVTablePtr, IRMonoClassFieldPtr, ParamOut<Variant> )
233 REMOTEMONO_API( field_get_offset,
false, uint32_t, IRMonoClassFieldPtr )
235 REMOTEMONO_API_PART_END()
236 REMOTEMONO_API_PART_BEGIN(MonoAPI, 2)
238 REMOTEMONO_API( method_get_class,
false, IRMonoClassPtr, IRMonoMethodPtr )
239 REMOTEMONO_API( method_get_name,
false,
string, IRMonoMethodPtr )
240 REMOTEMONO_API( method_get_flags,
false, uint32_t, IRMonoMethodPtr, ParamOut<uint32_t> )
241 REMOTEMONO_API( method_full_name,
false, ReturnOwn<string>, IRMonoMethodPtr, irmono_bool )
242 REMOTEMONO_API( method_signature,
false, IRMonoMethodSignaturePtr, IRMonoMethodPtr )
243 REMOTEMONO_API( method_get_header,
false, IRMonoMethodHeaderPtr, IRMonoMethodPtr )
244 REMOTEMONO_API( method_header_get_code,
false, irmono_voidp, IRMonoMethodHeaderPtr, ParamOut<uint32_t>,
246 REMOTEMONO_API( method_desc_new,
false, ReturnOwn<IRMonoMethodDescPtr>,
247 string_view, irmono_bool )
248 REMOTEMONO_API( method_desc_free,
false,
void, IRMonoMethodDescPtrRaw )
249 REMOTEMONO_API( method_desc_match,
false, irmono_bool, IRMonoMethodDescPtr, IRMonoMethodPtr )
250 REMOTEMONO_API( method_desc_search_in_class,
false, IRMonoMethodPtr, IRMonoMethodDescPtr, IRMonoClassPtr )
251 REMOTEMONO_API( method_desc_search_in_image,
false, IRMonoMethodPtr, IRMonoMethodDescPtr, IRMonoImagePtr )
253 REMOTEMONO_API( property_get_name,
false,
string, IRMonoPropertyPtr )
254 REMOTEMONO_API( property_get_flags,
false, uint32_t, IRMonoPropertyPtr )
255 REMOTEMONO_API( property_get_parent,
false, IRMonoClassPtr, IRMonoPropertyPtr )
256 REMOTEMONO_API( property_get_set_method,
false, IRMonoMethodPtr, IRMonoPropertyPtr )
257 REMOTEMONO_API( property_get_get_method,
false, IRMonoMethodPtr, IRMonoPropertyPtr )
258 REMOTEMONO_API( property_get_value,
false, IRMonoObjectPtr, IRMonoPropertyPtr,
RMonoVariant,
259 ParamOvwrInOut<ParamOut<VariantArray>>,
260 ParamException<IRMonoExceptionPtr> )
261 REMOTEMONO_API( property_set_value,
false,
void, IRMonoPropertyPtr,
RMonoVariant,
262 ParamOvwrInOut<VariantArray>,
263 ParamException<IRMonoExceptionPtr> )
265 REMOTEMONO_API( signature_get_return_type,
false, IRMonoTypePtr, IRMonoMethodSignaturePtr )
266 REMOTEMONO_API( signature_get_params,
false, IRMonoTypePtr, IRMonoMethodSignaturePtr, irmono_voidpp )
267 REMOTEMONO_API( signature_get_call_conv,
false, uint32_t, IRMonoMethodSignaturePtr )
268 REMOTEMONO_API( signature_get_desc,
false, ReturnOwn<string>, IRMonoMethodSignaturePtr, irmono_bool )
270 REMOTEMONO_API( object_get_class,
true, IRMonoClassPtr, IRMonoObjectPtr )
271 REMOTEMONO_API( object_new,
false, IRMonoObjectPtr, IRMonoDomainPtr, IRMonoClassPtr )
272 REMOTEMONO_API( runtime_object_init,
false,
void,
Variant )
273 REMOTEMONO_API( object_unbox,
true,
Variant, IRMonoObjectPtr )
274 REMOTEMONO_API( value_box,
false, IRMonoObjectPtr, IRMonoDomainPtr, IRMonoClassPtr,
RMonoVariant )
275 REMOTEMONO_API( object_to_string,
false, IRMonoStringPtr,
Variant, ParamException<IRMonoExceptionPtr> )
276 REMOTEMONO_API( object_clone,
false, IRMonoObjectPtr, IRMonoObjectPtr )
277 REMOTEMONO_API( object_get_domain,
false, IRMonoDomainPtr, IRMonoObjectPtr )
278 REMOTEMONO_API( object_get_virtual_method,
false, IRMonoMethodPtr, IRMonoObjectPtr, IRMonoMethodPtr )
279 REMOTEMONO_API( object_isinst,
false, IRMonoObjectPtr, IRMonoObjectPtr, IRMonoClassPtr )
280 REMOTEMONO_API( object_get_size,
false, irmono_uint, IRMonoObjectPtr )
282 REMOTEMONO_API( string_new,
false, IRMonoStringPtr, IRMonoDomainPtr, string_view )
283 REMOTEMONO_API( string_new_len,
false, IRMonoStringPtr, IRMonoDomainPtr, string_view, irmono_uint )
284 REMOTEMONO_API( string_new_utf16,
false, IRMonoStringPtr, IRMonoDomainPtr, u16string_view, int32_t )
285 REMOTEMONO_API( string_new_utf32,
false, IRMonoStringPtr, IRMonoDomainPtr, u32string_view, int32_t )
286 REMOTEMONO_API( string_to_utf8,
false, ReturnOwn<string>, IRMonoStringPtr )
287 REMOTEMONO_API( string_to_utf16,
false, ReturnOwn<u16string>, IRMonoStringPtr )
288 REMOTEMONO_API( string_to_utf32,
false, ReturnOwn<u32string>, IRMonoStringPtr )
289 REMOTEMONO_API( string_chars,
false, u16string, IRMonoStringPtr )
290 REMOTEMONO_API( string_length,
false, irmono_int, IRMonoStringPtr )
291 REMOTEMONO_API( string_equal,
false, irmono_bool, IRMonoStringPtr, IRMonoStringPtr )
293 REMOTEMONO_API( array_new,
false, IRMonoArrayPtr, IRMonoDomainPtr, IRMonoClassPtr, irmono_uintptr_t )
294 REMOTEMONO_API( array_new_full,
false, IRMonoArrayPtr, IRMonoDomainPtr, IRMonoClassPtr, irmono_voidp, irmono_voidp )
295 REMOTEMONO_API( array_class_get,
false, IRMonoClassPtr, IRMonoClassPtr, uint32_t )
296 REMOTEMONO_API( array_addr_with_size,
false,
Variant, IRMonoArrayPtr, irmono_int, irmono_uintptr_t )
297 REMOTEMONO_API( array_length,
false, irmono_uintptr_t, IRMonoArrayPtr )
298 REMOTEMONO_API( array_element_size,
false, int32_t, IRMonoClassPtr )
299 REMOTEMONO_API( class_array_element_size,
false, int32_t, IRMonoClassPtr )
300 REMOTEMONO_API( array_clone,
false, IRMonoArrayPtr, IRMonoArrayPtr )
302 REMOTEMONO_API( gchandle_new,
true, irmono_gchandle, IRMonoObjectPtr, irmono_bool )
303 REMOTEMONO_API( gchandle_new_weakref,
false, irmono_gchandle, IRMonoObjectPtr, irmono_bool )
304 REMOTEMONO_API( gchandle_get_target,
true, IRMonoObjectPtrRaw, irmono_gchandle )
305 REMOTEMONO_API( gchandle_free,
true,
void, irmono_gchandle )
307 REMOTEMONO_API( gc_collect,
false,
void, irmono_int )
308 REMOTEMONO_API( gc_max_generation,
false, irmono_int )
309 REMOTEMONO_API( gc_get_generation,
false, irmono_int, IRMonoObjectPtr )
310 REMOTEMONO_API( gc_wbarrier_set_arrayref,
false,
void, IRMonoArrayPtr, irmono_voidp, IRMonoObjectPtr )
312 REMOTEMONO_API( runtime_invoke,
false, IRMonoObjectPtr, IRMonoMethodPtr,
Variant,
313 ParamOvwrInOut<VariantArray>,
314 ParamException<IRMonoExceptionPtr> )
316 REMOTEMONO_API( compile_method,
false, irmono_voidp, IRMonoMethodPtr )
318 REMOTEMONO_API( jit_info_table_find,
false, IRMonoJitInfoPtr, IRMonoDomainPtr, irmono_voidp )
319 REMOTEMONO_API( jit_info_get_code_start,
false, irmono_voidp, IRMonoJitInfoPtr )
320 REMOTEMONO_API( jit_info_get_code_size,
false, irmono_int, IRMonoJitInfoPtr )
321 REMOTEMONO_API( jit_info_get_method,
false, IRMonoMethodPtr, IRMonoJitInfoPtr )
323 REMOTEMONO_API( disasm_code,
false, ReturnOwn<string>, IRMonoDisHelperPtr, IRMonoMethodPtr,
324 irmono_cbytep, irmono_cbytep )
325 REMOTEMONO_API_PART_END()
327 REMOTEMONO_API_MAIN_DECLARE(MonoAPI, 2)
341 REMOTEMONO_API_PART_BEGIN(MiscAPI, 1)
345 REMOTEMONO_API( g_free,
false,
void, irmono_voidp )
347 REMOTEMONO_API_PART_END()
349 REMOTEMONO_API_MAIN_DECLARE(MiscAPI, 1)
364 REMOTEMONO_API_PART_BEGIN(BoilerplateAPI, 1)
368 REMOTEMONO_API_SIMPLE( rmono_foreach_ipcvec_adapter,
void, irmono_voidp, irmono_voidp )
369 REMOTEMONO_API_SIMPLE( rmono_gchandle_pin, irmono_gchandle, irmono_gchandle )
370 REMOTEMONO_API_SIMPLE( rmono_array_setref,
void, irmono_gchandle, irmono_uintptr_t, irmono_gchandle )
372 REMOTEMONO_API_PART_END()
374 REMOTEMONO_API_MAIN_DECLARE(BoilerplateAPI, 1)
383 template <
typename ABI>
390 REMOTEMONO_ABI_TYPETRAITS_TYPEDEFS(RMonoABITypeTraits<ABI>)
411 void injectAPI(
RMonoAPI* mono, blackbone::Process& process, blackbone::ThreadPtr workerThread);
431 bool isAPIFunctionSupported(
const std::string& name)
const {
return validAPIFuncNames.find(name) != validAPIFuncNames.end(); }
434 ABI* getABI() {
return abi; }
436 std::string assembleBoilerplateCode();
438 template <
typename FuncT,
typename MainT,
typename... PartialT>
439 void foreachAPIPacked(MainT& main, FuncT func, PackHelper<PartialT...>);
441 template <
typename FuncT,
typename FirstT,
typename... OtherT>
442 void foreachAPIRecurse(FuncT func, FirstT& part, OtherT&... other);
444 template <
typename MainAPIT,
typename FuncT>
445 void foreachAPI(MainAPIT& api, FuncT func);
449 blackbone::Process* process;
451 typename IPCVec::VectorPtr ipcVecPtr;
452 blackbone::MemBlock remDataBlock;
453 blackbone::ThreadPtr worker;
455 std::unordered_set<std::string> validAPIFuncNames;