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...
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); ...
DEFINE_IL2CPP_FUN(Il2CppMethodPointer, il2cpp_resolve_icall, (constchar* name)); DEFINE_IL2CPP_FUN(void*, il2cpp_alloc, (size_t size)); DEFINE_IL2CPP_FUN(void, il2cpp_free, (void* ptr)); // array DEFINE_IL2CPP_FUN(Il2CppClass*, il2cpp_array_class_get, (Il2CppClass * element...
void SetupMethodsLocked (Il2CppClass *klass, const FastAutoLock& lock) { ...for(MethodIndexindex= start;index< end; ++index) { const Il2CppMethodDefinition* methodDefinition = MetadataCache::GetMethodDefinitionFromIndex (index); ... newMethod->name = MetadataCache::GetStringFromIndex (methodDef...
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...
auto assemblyLoad = il2cpp_class_get_method_from_name(assemblyClass, "Load", 1); @@ -427,16 +435,14 @@ void il2cpp_dump(void *handle, char *outDir) { } } #endif LOGI("write dump file"); auto outPath = std::string(outDir).append("/files/dump.cs"); ...
继续搜索对method->methodPointer的修改,在Class.cpp文件中的Class::SetupMethodsLocked(Il2CppClass *klass, const il2cpp::os::FastAutoLock& lock)方法下成功找到了赋值语句。该函数的作用即通过metadata构造类的所有MethodInfo,而MethodInfo对象则包含了方法函数指针。 可以看到MetadataCache::GetMethodPointer通过image...
IL2CPP_TYPE_CLASS对应我们定义的class,IL2CPP_TYPE_VALUETYPE对应struct,这两种情况生成的Il2CppType全局变量的data最存放的是Il2CppTypeDefinition数组的下标,这个下标GlobalMetadata::Initialize阶段初始化为Il2CppTypeDefinition数组元素指针,FromIl2CppType中直接根据Il2CppTypeDefinition信息生成Il2CppClass IL2CPP_TYPE_GEN...