diff --git a/Il2CppInspector.Common/IL2CPP/Metadata.cs b/Il2CppInspector.Common/IL2CPP/Metadata.cs index c71578a4..5de9ed4b 100644 --- a/Il2CppInspector.Common/IL2CPP/Metadata.cs +++ b/Il2CppInspector.Common/IL2CPP/Metadata.cs @@ -195,6 +195,25 @@ private void Initialize() Header.AttributeDataRangeSize / Sizeof()); } + if (Version is 29 or 31) + { + // 29.2/31.2 added a new isUnmanagedCallersOnly flag to Il2CppMethodDefinition. + // This offsets all subsequent entries by one - we can detect this by checking the + // top token byte (which should always be 0x06). + + if (Methods.Length >= 2) + { + var secondToken = Methods[1].token; + if (secondToken >> 24 != 0x6) + { + Version += 0.2; + + Methods = ReadArray(Header.methodsOffset, + Header.methodsCount / Sizeof(typeof(Il2CppMethodDefinition))); + } + } + } + // Get all metadata strings var pluginGetStringsResult = PluginHooks.GetStrings(this); if (pluginGetStringsResult.IsDataModified && !pluginGetStringsResult.IsInvalid)