Code:
typedef MonoDomain* (__cdecl * mono_jit_init_versionPointer)(const char* file, const char* version);
typedef MonoAssembly* (__cdecl * mono_domain_assembly_openPointer)(MonoDomain* domain, const char* name);
typedef MonoAssembly* (__cdecl * mono_assembly_loadPointer) (MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status);
typedef int (__cdecl * mono_jit_execPointer)(MonoDomain* domain, MonoAssembly* assembly, int argc, char** argv);
typedef MonoClass* (__cdecl * mono_class_from_namePointer)(MonoImage* image, const char* name_space, const char* name);
typedef MonoObject* (__cdecl * mono_object_newPointer)(MonoDomain* domain, MonoClass* klass);
typedef void (__cdecl * mono_runtime_object_initPointer)(MonoObject* thisObject);
typedef MonoMethod* (__cdecl * mono_method_desc_search_in_classPointer)(MonoMethodDesc *desc, MonoClass *klass);
typedef MonoObject* (__cdecl * mono_runtime_invokePointer)(MonoMethod *method, void *obj, void **params, MonoObject **exc);
mono_jit_init_versionPointer pInit;
mono_assembly_loadPointer pAssemblyLoad;
mono_jit_execPointer pMono_jit_exec;
mono_class_from_namePointer pMono_class_from_name;
mono_object_newPointer pMono_object_new;
mono_domain_assembly_openPointer pMono_domain_assembly_open;
mono_runtime_object_initPointer pMono_runtime_object_init;
mono_method_desc_search_in_classPointer pMono_method_desc_search_in_class;
mono_runtime_invokePointer pMono_runtime_invoke;
MonoObject* __cdecl hkmono_runtime_invoke(MonoMethod *method, void *obj, void **params, MonoObject **exc)
{
MessageBoxA(NULL,"a","a",MB_OK);
return pMono_runtime_invoke(method,obj,params,exc);
}
MonoMethod* __cdecl hkmono_method_desc_search_in_class(MonoMethodDesc *desc, MonoClass *klass)
{
MessageBoxA(NULL,"a","a",MB_OK);
return pMono_method_desc_search_in_class(desc, klass);
}
void __cdecl hkmono_runtime_object_init(MonoObject* thisObject)
{
MessageBoxA(NULL,"a","a",MB_OK);
pMono_runtime_object_init(thisObject);
}
MonoAssembly* __cdecl hkmono_domain_assembly_open(MonoDomain* domain, const char* name)
{
MessageBoxA(NULL,name,name,MB_OK);
return pMono_domain_assembly_open(domain, name);
}
MonoObject* __cdecl hkmono_object_new(MonoDomain* domain, MonoClass* klass)
{
MessageBoxA(NULL,"a","a",MB_OK);
return pMono_object_new(domain, klass);
}
MonoClass* __cdecl hkmono_class_from_name(MonoImage* image, const char* name_space, const char* name)
{
MessageBoxA(NULL,name_space,name,MB_OK);
return pMono_class_from_name(image, name_space, name);
}
int __cdecl hkmono_jit_execPointer(MonoDomain* domain, MonoAssembly* assembly, int argc, char** argv)
{
MessageBoxA(NULL,"a","A",MB_OK);
return pMono_jit_exec(domain,assembly,argc,argv);
}
MonoAssembly* __cdecl hkAssemblyLoad(MonoAssemblyName *aname, const char *basedir, MonoImageOpenStatus *status)
{
return pAssemblyLoad(aname,basedir,status);
}
MonoDomain* __cdecl hkInit(const char* file, const char* version)
{
MessageBoxA(NULL,file,file,MB_OK);
return pInit(file, version);
}
HINSTANCE hDLL = GetModuleHandleA("mono.dll");
pInit = ( mono_jit_init_versionPointer )DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_jit_init_version"),(PBYTE)hkInit);
pAssemblyLoad = ( mono_assembly_loadPointer )DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_assembly_load"),(PBYTE)hkAssemblyLoad);
pMono_jit_exec = ( mono_jit_execPointer )DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_jit_exec"),(PBYTE)hkmono_jit_execPointer);
pMono_class_from_name = (mono_class_from_namePointer)DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_class_from_name"),(PBYTE)hkmono_class_from_name);
//pMono_object_new = (mono_object_newPointer)DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_object_new"),(PBYTE)hkmono_object_new);
pMono_domain_assembly_open = (mono_domain_assembly_openPointer)DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_domain_assembly_open"),(PBYTE)hkmono_domain_assembly_open);
pMono_runtime_object_init = (mono_runtime_object_initPointer)DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_runtime_object_init"),(PBYTE)hkmono_runtime_object_init);
//pMono_method_desc_search_in_class = (mono_method_desc_search_in_classPointer)DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_method_desc_search_in_class"),(PBYTE)hkmono_method_desc_search_in_class);
pMono_runtime_invoke = (mono_runtime_invokePointer)DetourFunction((PBYTE) GetProcAddress(hDLL,"mono_runtime_invoke"),(PBYTE)hkmono_runtime_invoke);