IL2CPP: Load managed code string literals

This commit is contained in:
Katy Coe
2020-01-27 01:10:33 +01:00
parent 8e4859b563
commit 9e6c7ccd36
3 changed files with 20 additions and 3 deletions

View File

@@ -29,6 +29,7 @@ namespace Il2CppInspector
public double Version => Metadata.Version; public double Version => Metadata.Version;
public Dictionary<int, string> Strings => Metadata.Strings; public Dictionary<int, string> Strings => Metadata.Strings;
public string[] StringLiterals => Metadata.StringLiterals;
public Il2CppTypeDefinition[] TypeDefinitions => Metadata.Types; public Il2CppTypeDefinition[] TypeDefinitions => Metadata.Types;
public Il2CppAssemblyDefinition[] Assemblies => Metadata.Assemblies; public Il2CppAssemblyDefinition[] Assemblies => Metadata.Assemblies;
public Il2CppImageDefinition[] Images => Metadata.Images; public Il2CppImageDefinition[] Images => Metadata.Images;

View File

@@ -1,15 +1,17 @@
/* /*
Copyright 2017 Perfare - https://github.com/Perfare/Il2CppDumper Copyright 2017 Perfare - https://github.com/Perfare/Il2CppDumper
Copyright 2017-2019 Katy Coe - http://www.hearthcode.org - http://www.djkaty.com Copyright 2017-2020 Katy Coe - http://www.hearthcode.org - http://www.djkaty.com
All rights reserved. All rights reserved.
*/ */
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Dynamic;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Text;
using NoisyCowStudios.Bin2Object; using NoisyCowStudios.Bin2Object;
namespace Il2CppInspector namespace Il2CppInspector
@@ -40,6 +42,7 @@ namespace Il2CppInspector
public int[] AttributeTypeIndices { get; } public int[] AttributeTypeIndices { get; }
public int[] GenericConstraintIndices { get; } public int[] GenericConstraintIndices { get; }
public uint[] VTableMethodIndices { get; } public uint[] VTableMethodIndices { get; }
public string[] StringLiterals { get; }
public Dictionary<int, string> Strings { get; } = new Dictionary<int, string>(); public Dictionary<int, string> Strings { get; } = new Dictionary<int, string>();
public List<MetadataUsage> MetadataUsages { get; } = new List<MetadataUsage>(); public List<MetadataUsage> MetadataUsages { get; } = new List<MetadataUsage>();
@@ -131,10 +134,17 @@ namespace Il2CppInspector
AttributeTypeRanges = ReadArray<Il2CppCustomAttributeTypeRange>(Header.attributesInfoOffset, Header.attributesInfoCount / Sizeof(typeof(Il2CppCustomAttributeTypeRange))); AttributeTypeRanges = ReadArray<Il2CppCustomAttributeTypeRange>(Header.attributesInfoOffset, Header.attributesInfoCount / Sizeof(typeof(Il2CppCustomAttributeTypeRange)));
} }
// Get all string literals // Get all metadata string literals
Position = Header.stringOffset; Position = Header.stringOffset;
while (Position < Header.stringOffset + Header.stringCount) while (Position < Header.stringOffset + Header.stringCount)
Strings.Add((int)Position - Header.stringOffset, ReadNullTerminatedString()); Strings.Add((int)Position - Header.stringOffset, ReadNullTerminatedString());
// Get all managed code string literals
var stringLiteralList = ReadArray<Il2CppStringLiteral>(Header.stringLiteralOffset, Header.stringLiteralCount / Sizeof(typeof(Il2CppStringLiteral)));
StringLiterals = new string[stringLiteralList.Length];
for (var i = 0; i < stringLiteralList.Length; i++)
StringLiterals[i] = ReadFixedLengthString(Header.stringLiteralDataOffset + stringLiteralList[i].dataIndex, stringLiteralList[i].length);
} }
private List<MetadataUsage> buildMetadataUsages() private List<MetadataUsage> buildMetadataUsages()

View File

@@ -1,6 +1,6 @@
/* /*
Copyright 2017 Perfare - https://github.com/Perfare/Il2CppDumper Copyright 2017 Perfare - https://github.com/Perfare/Il2CppDumper
Copyright 2017-2019 Katy Coe - http://www.hearthcode.org - http://www.djkaty.com Copyright 2017-2020 Katy Coe - http://www.hearthcode.org - http://www.djkaty.com
All rights reserved. All rights reserved.
*/ */
@@ -433,4 +433,10 @@ namespace Il2CppInspector
public uint destinationindex; public uint destinationindex;
public uint encodedSourceIndex; public uint encodedSourceIndex;
} }
public class Il2CppStringLiteral
{
public int length;
public int dataIndex;
}
} }