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