// Basic primitive types public TypeInfo GetTypeFromEnum(Il2CppTypeEnum t) { if ((int)t >= Il2CppConstants.FullNameTypeString.Count) { return(null); } return(Assemblies.SelectMany(x => x.DefinedTypes).First(x => x.FullName == Il2CppConstants.FullNameTypeString[(int)t])); }
// Basic primitive types are specified via a flag value private TypeInfo getTypeDefinitionFromTypeEnum(Il2CppTypeEnum t) { if ((int)t >= Il2CppConstants.FullNameTypeString.Count) { return(null); } var fqn = Il2CppConstants.FullNameTypeString[(int)t]; return(TypesByFullName[fqn]); }
// Basic primitive types public TypeInfo GetTypeFromTypeEnum(Il2CppTypeEnum t) { if ((int)t >= Il2CppConstants.FullNameTypeString.Count) { return(null); } var fqn = Il2CppConstants.FullNameTypeString[(int)t]; return(TypesByFullName[fqn]); }
public bool GetConstantValueFromBlob(Il2CppTypeEnum type, BinaryReader reader, out BlobValue value) { value = new BlobValue(); value.il2CppTypeEnum = type; switch (type) { case Il2CppTypeEnum.IL2CPP_TYPE_BOOLEAN: value.Value = reader.ReadBoolean(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_U1: value.Value = reader.ReadByte(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_I1: value.Value = reader.ReadSByte(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_CHAR: value.Value = BitConverter.ToChar(reader.ReadBytes(2), 0); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_U2: value.Value = reader.ReadUInt16(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_I2: value.Value = reader.ReadInt16(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_U4: if (il2Cpp.Version >= 29) { value.Value = reader.ReadCompressedUInt32(); } else { value.Value = reader.ReadUInt32(); } return(true); case Il2CppTypeEnum.IL2CPP_TYPE_I4: if (il2Cpp.Version >= 29) { value.Value = reader.ReadCompressedInt32(); } else { value.Value = reader.ReadInt32(); } return(true); case Il2CppTypeEnum.IL2CPP_TYPE_U8: value.Value = reader.ReadUInt64(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_I8: value.Value = reader.ReadInt64(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_R4: value.Value = reader.ReadSingle(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_R8: value.Value = reader.ReadDouble(); return(true); case Il2CppTypeEnum.IL2CPP_TYPE_STRING: int length; if (il2Cpp.Version >= 29) { length = reader.ReadCompressedInt32(); if (length == -1) { value.Value = null; } else { value.Value = Encoding.UTF8.GetString(reader.ReadBytes(length)); } } else { length = reader.ReadInt32(); value.Value = reader.ReadString(length); } return(true); case Il2CppTypeEnum.IL2CPP_TYPE_SZARRAY: var arrayLen = reader.ReadCompressedInt32(); if (arrayLen == -1) { value.Value = null; } else { var array = new BlobValue[arrayLen]; var arrayElementType = ReadEncodedTypeEnum(reader, out var enumType); var arrayElementsAreDifferent = reader.ReadByte(); for (int i = 0; i < arrayLen; i++) { var elementType = arrayElementType; if (arrayElementsAreDifferent == 1) { elementType = ReadEncodedTypeEnum(reader, out enumType); } GetConstantValueFromBlob(elementType, reader, out var data); data.il2CppTypeEnum = elementType; data.EnumType = enumType; array[i] = data; } value.Value = array; } return(true); case Il2CppTypeEnum.IL2CPP_TYPE_IL2CPP_TYPE_INDEX: var typeIndex = reader.ReadCompressedInt32(); if (typeIndex == -1) { value.Value = null; } else { value.Value = il2Cpp.types[typeIndex]; } return(true); default: value = null; return(false); } }
public Il2CppTypeInfo(Il2CppType cppType) { this._cppType = cppType; this._cppTypeEnum = cppType.type; }