var functionName_t=Memory.allocUtf8String(functionName) var Il2CppClass=il2cpp_class_from_name(Il2CppImage,namespaze_t,className_t) console.log("Il2CppClass\t--->\t",Il2CppClass) var MethodInfo=il2cpp_class_get_method_from_name(Il2CppClass,functionName_t,argsCount) console.log("MethodInfo...
auto assemblyLoad = il2cpp_class_get_method_from_name(assemblyClass, "Load", 1); ... 初始化一些常用的il2cpp函数,这些函数都是il2cpp在编译阶段打入到so内部的,好像代码是没有开源的 。 不过还好,根据方法名都可以知道具体的函数的含义 。部分函数如下 : 1 2 3 4 5 6 7 8 9 10 11 DO_API(con...
var functionName_t=Memory.allocUtf8String(functionName) var Il2CppClass=il2cpp_class_from_name(Il2CppImage,namespaze_t,className_t) console.log("Il2CppClass\t--->\t",Il2CppClass) var MethodInfo=il2cpp_class_get_method_from_name(Il2CppClass,functionName_t,argsCount) console.log("MethodInfo...
DEFINE_IL2CPP_FUN(Il2CppClass*, il2cpp_class_get_interfaces, (Il2CppClass * klass,void* *iter)); DEFINE_IL2CPP_FUN(constPropertyInfo*, il2cpp_class_get_properties, (Il2CppClass * klass,void* *iter)); DEFINE_IL2CPP_FUN(constPropertyInfo*, il2cpp_class_get_property_from_name, (Il2CppCla...
Il2CppString *name; Il2CppReflectionType *reftype; } Il2CppReflectionMethod; Type.GetMethod实际上是通过Il2CppReflectionType找到Il2CppClass,然后根据条件找到MethodInfo并构造Il2CppReflectionMethod的过程。 il2cpp_codegen_initialize_runtime_metadata 看il2cpp生成代码,到处都可以看到这个调用的身影。简单来说就是...
results.length){if(exportName=="il2cpp_class_get_type"||exportName=="il2cpp_type_get_name"||exportName=="il2cpp_method_get_param_count"||exportName=="il2cpp_method_get_param_name"||exportName=="il2cpp_method_get_param"){handle=results[0].address;}elsehandle=results[results.length-1]...
继续搜索对method->methodPointer的修改,在Class.cpp文件中的Class::SetupMethodsLocked(Il2CppClass *klass, const il2cpp::os::FastAutoLock& lock)方法下成功找到了赋值语句。该函数的作用即通过metadata构造类的所有MethodInfo,而MethodInfo对象则包含了方法函数指针。
autoassemblyClass =il2cpp_class_from_name(corlib,"System.Reflection","Assembly"); autoassemblyLoad =il2cpp_class_get_method_from_name(assemblyClass,"Load",1); Expand DownExpand Up@@ -369,7 +386,7 @@ void il2cpp_dump(void *handle, char *outDir) { ...
搜索codeGenModule类型,找到Il2CppCodeRegistration结构体,通过模块名查找对应关系,定位到codeGenModules>methodPointers,完成方法符号的恢复。获得字段偏移地址:从il2cpp的API出发,利用Class::GetFieldFromName和相关函数解析字段信息。通过递归初始化类和父类的FieldInfo,找到MetadataCache::GetFieldOffset...
j_il2cpp_runtime_class_init_0(UnityEngine_Object_TypeInfo); v28 = UnityEngine_Object__Instantiate_object_(PrefabNote, Method_UnityEngine_Object_Instantiate_GameObject___); if ( !v28 ) break; v29 = v28; v30 = UnityEngine_GameObject__get_transform(v28, 0LL); ...