public static unsafe IntPtr GetGcHandlePtrFromIl2CppObject(IntPtr pointer) { if (pointer == IntPtr.Zero) { throw new NullReferenceException(); } var objectKlass = (Il2CppClass *)IL2CPP.il2cpp_object_get_class(pointer); var targetGcHandlePointer = IntPtr.Add(pointer, (int)UnityVersionHandler.Wrap(objectKlass).InstanceSize - IntPtr.Size); var gcHandle = *(IntPtr *)targetGcHandlePointer; return(gcHandle); }
internal static unsafe InjectedClassData *GetInjectedData(IntPtr objectPointer) { Il2CppClass *pObjectClass = (Il2CppClass *)IL2CPP.il2cpp_object_get_class(objectPointer); return((InjectedClassData *)(objectPointer + (int)UnityVersionHandler.Wrap(pObjectClass).InstanceSize - sizeof(InjectedClassData)).ToPointer()); }