diff --git a/Il2CppInspector/Metadata.cs b/Il2CppInspector/Metadata.cs index 3911a90..f7f4b01 100644 --- a/Il2CppInspector/Metadata.cs +++ b/Il2CppInspector/Metadata.cs @@ -78,7 +78,8 @@ namespace Il2CppInspector } // Load all the relevant metadata using offsets provided in the header - Images = ReadArray(Header.imagesOffset, Header.imagesCount / Sizeof(typeof(Il2CppImageDefinition))); + if (Version >= 16) + Images = ReadArray(Header.imagesOffset, Header.imagesCount / Sizeof(typeof(Il2CppImageDefinition))); // As an additional sanity check, all images in the metadata should have Mono.Cecil.MetadataToken == 1 // In metadata v24.1, two extra fields were added which will cause the below test to fail. @@ -95,13 +96,11 @@ namespace Il2CppInspector throw new InvalidOperationException("ERROR: Could not verify the integrity of the metadata file image list"); } - Assemblies = ReadArray(Header.assembliesOffset, Header.assembliesCount / Sizeof(typeof(Il2CppAssemblyDefinition))); Types = ReadArray(Header.typeDefinitionsOffset, Header.typeDefinitionsCount / Sizeof(typeof(Il2CppTypeDefinition))); Methods = ReadArray(Header.methodsOffset, Header.methodsCount / Sizeof(typeof(Il2CppMethodDefinition))); Params = ReadArray(Header.parametersOffset, Header.parametersCount / Sizeof(typeof(Il2CppParameterDefinition))); Fields = ReadArray(Header.fieldsOffset, Header.fieldsCount / Sizeof(typeof(Il2CppFieldDefinition))); FieldDefaultValues = ReadArray(Header.fieldDefaultValuesOffset, Header.fieldDefaultValuesCount / Sizeof(typeof(Il2CppFieldDefaultValue))); - ParameterDefaultValues = ReadArray(Header.parameterDefaultValuesOffset, Header.parameterDefaultValuesCount / Sizeof(typeof(Il2CppParameterDefaultValue))); Properties = ReadArray(Header.propertiesOffset, Header.propertiesCount / Sizeof(typeof(Il2CppPropertyDefinition))); Events = ReadArray(Header.eventsOffset, Header.eventsCount / Sizeof(typeof(Il2CppEventDefinition))); InterfaceUsageIndices = ReadArray(Header.interfacesOffset, Header.interfacesCount / sizeof(int)); @@ -109,6 +108,10 @@ namespace Il2CppInspector GenericContainers = ReadArray(Header.genericContainersOffset, Header.genericContainersCount / Sizeof(typeof(Il2CppGenericContainer))); GenericParameters = ReadArray(Header.genericParametersOffset, Header.genericParametersCount / Sizeof(typeof(Il2CppGenericParameter))); + if (Version >= 16) { + Assemblies = ReadArray(Header.assembliesOffset, Header.assembliesCount / Sizeof(typeof(Il2CppAssemblyDefinition))); + ParameterDefaultValues = ReadArray(Header.parameterDefaultValuesOffset, Header.parameterDefaultValuesCount / Sizeof(typeof(Il2CppParameterDefaultValue))); + } if (Version >= 21) { AttributeTypeIndices = ReadArray(Header.attributeTypesOffset, Header.attributeTypesCount / sizeof(int)); AttributeTypeRanges = ReadArray(Header.attributesInfoOffset, Header.attributesInfoCount / Sizeof(typeof(Il2CppCustomAttributeTypeRange))); diff --git a/Il2CppInspector/MetadataClasses.cs b/Il2CppInspector/MetadataClasses.cs index e5e44f2..c73c419 100644 --- a/Il2CppInspector/MetadataClasses.cs +++ b/Il2CppInspector/MetadataClasses.cs @@ -11,6 +11,8 @@ namespace Il2CppInspector { // Unity 4.6.1p5 - first release, no global-metadata.dat // Unity 5.2.0f3 -> v15 + // Unity 5.3.0f1 -> v16 + // .. // Unity 5.6.2p3 -> v23 // Unity 5.6.4f1 -> v23 // Unity 2017.2f3 -> v24 @@ -39,7 +41,9 @@ namespace Il2CppInspector public int methodsOffset; // Il2CppMethodDefinition public int methodsCount; + [Version(Min = 16)] public int parameterDefaultValuesOffset; // Il2CppParameterDefaultValue + [Version(Min = 16)] public int parameterDefaultValuesCount; public int fieldDefaultValuesOffset; // Il2CppFieldDefaultValue @@ -47,7 +51,9 @@ namespace Il2CppInspector public int fieldAndParameterDefaultValueDataOffset; // uint8_t public int fieldAndParameterDefaultValueDataCount; + [Version(Min = 16)] public int fieldMarshaledSizesOffset; // Il2CppFieldMarshaledSize + [Version(Min = 16)] public int fieldMarshaledSizesCount; public int parametersOffset; // Il2CppParameterDefinition @@ -76,9 +82,13 @@ namespace Il2CppInspector [Version(Max = 24.1)] public int rgctxEntriesCount; + [Version(Min = 16)] public int imagesOffset; // Il2CppImageDefinition + [Version(Min = 16)] public int imagesCount; + [Version(Min = 16)] public int assembliesOffset; // Il2CppAssemblyDefinition + [Version(Min = 16)] public int assembliesCount; [Version(Min = 19)] @@ -159,7 +169,13 @@ namespace Il2CppInspector public class Il2CppAssemblyDefinition { public int imageIndex; + + [Version(Min = 19)] public uint token; + + [Version(Max = 24.0)] + public int customAttributeIndex; + public int referencedAssemblyStart; public int referencedAssemblyCount; public Il2CppAssemblyNameDefinition aname; @@ -253,7 +269,10 @@ namespace Il2CppInspector public class Il2CppMethodDefinition { public int nameIndex; + + [Version(Min = 16)] public int declaringType; + public int returnType; public int parameterStart;