对于一些内置类型,可以直接最终定位到对应的Il2CppClass,比如IL2CPP_TYPE_I4将直接返回il2cpp_defaults.int32_class,IL2CPP_TYPE_OBJECT直接返回il2cpp_defaults.object_class,而il2cpp_defaults是在Runtime::Init里初始化的常用类型缓存。 一维数组对应的IL2
DEFAULTS_INIT_TYPE(sbyte_class, "System", "SByte", int8_t); DEFAULTS_INIT_TYPE(int16_class, "System", "Int16", int16_t); DEFAULTS_INIT_TYPE(uint16_class, "System", "UInt16", uint16_t); DEFAULTS_INIT_TYPE(int32_class, "System", "Int32", int32_t); ...
一、IL2CPP的原理(生成)机制: Runtime库: il2cpp相关的工具库在unity安装目录下: D:\Program Files\Unity\Editor\Data\il2cpp 对于一个工程通过配置生成选项生成的CPP文件的临时目录是: E:\Work\2019Q2\Unity\HotfixCalc\Temp\StagingArea\Il2Cpp\il2cppOutput 接下来简单... 查看原文 提高apk打包速度(il2cpp...
var il2cpp_class_from_name=new NativeFunction( Module.findExportByName(soName,"il2cpp_class_from_name"), 'pointer',['pointer','pointer','pointer']) //const MethodInfo*il2cpp_class_get_method_from_name(Il2CppClass*klass, const char*name,intargsCount) var il2cpp_class_get_method_from_name...
public class MemorySnapshotTrigger : MonoBehaviour { [SerializeField] KeyCode _snapshotKey = KeyCode.F12; void Update() { if(Input.GetKeyDown(_snapshotKey)) { CaptureSnapshot(); } } static void CaptureSnapshot() { MemoryProfiler.TakeSnapshot( ...
Il2CppNameToTypeDefinitionIndexHashTable*nameToClassHashTable; const Il2CppCodeGenModule*codeGenModule; uint32_t token; uint8_t dynamic; } Il2CppImage; typedef struct Il2CppImage { const char*name; const char*nameNoExt; Il2CppAssembly*assembly; ...
public class ObjectPool<T> where T : new() { private Stack<T> m_ObjectStack = new Stack<T>(); public T Get() { if (m_ObjectStack.Count > 0) { return m_ObjectStack.Pop(); } else { return new T(); } } public void Release(T obj) ...
public class NativePluginWrapper : IDisposable { private IntPtr _nativePtr; ~NativePluginWrapper() { if(_nativePtr != IntPtr.Zero) { // 需调用NativeFree(_nativePtr); } } } 二、Memory Profiler深度配置 1. 内存快照捕获配置 // 运行时主动捕获快照 ...
从il2cpp的API出发,利用Class::GetFieldFromName和相关函数解析字段信息。通过递归初始化类和父类的FieldInfo,找到MetadataCache::GetFieldOffsetFromIndexLocked函数,这个函数可以帮助获取到字段的偏移地址。总结:Il2Cpp恢复符号的过程是一个复杂但有序的过程,它涉及到对globalmetadata.dat文件的解析、对il2...
搜索codeGenModule类型,发现Il2CppCodeRegistration结构体。通过moduleName查找对应关系,定位codeGenModules->methodPointers,完成方法符号恢复。四、获得field偏移地址 从il2cpp api出发,Class::GetFieldFromName和相关函数解析field信息。通过递归初始化类和父类FieldInfo,找到MetadataCache::GetFieldOffset...