From 08431b774a4cf41e243809e117d2ee0874186291 Mon Sep 17 00:00:00 2001 From: LukeFZ <17146677+LukeFZ@users.noreply.github.com> Date: Fri, 8 Nov 2024 23:33:13 +0100 Subject: [PATCH] Fix metadata usage issues caused by it being a value type now --- .../IL2CPP/Il2CppInspector.cs | 17 ++++++++--------- Il2CppInspector.Common/IL2CPP/MetadataUsage.cs | 4 +--- Il2CppInspector.Common/Model/AppModel.cs | 3 ++- 3 files changed, 11 insertions(+), 13 deletions(-) diff --git a/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs b/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs index b0ed401..3ffc749 100644 --- a/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs +++ b/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs @@ -108,13 +108,13 @@ namespace Il2CppInspector return buildLateBindingMetadataUsages(); // Version >= 19 && < 27 - var usages = new Dictionary(); + var usages = new Dictionary(); foreach (var metadataUsageList in Metadata.MetadataUsageLists) { for (var i = 0; i < metadataUsageList.Count; i++) { var metadataUsagePair = Metadata.MetadataUsagePairs[metadataUsageList.Start + i]; - usages.TryAdd(metadataUsagePair.DestinationIndex, MetadataUsage.FromEncodedIndex(this, metadataUsagePair.EncodedSourceIndex)); + usages.TryAdd(metadataUsagePair.DestinationIndex, metadataUsagePair.EncodedSourceIndex); } } @@ -123,10 +123,12 @@ namespace Il2CppInspector // so we have to calculate the correct number of usages above before reading the usage address list from the binary var count = usages.Keys.Max() + 1; var addresses = Binary.Image.ReadMappedUWordArray(Binary.MetadataRegistration.MetadataUsages, (int) count); - foreach (var usage in usages) - usage.Value.SetAddress(addresses[usage.Key]); - return usages.Values.ToList(); + var metadataUsages = new List(); + foreach (var (index, encodedUsage) in usages) + metadataUsages.Add(MetadataUsage.FromEncodedIndex(this, encodedUsage, addresses[index])); + + return metadataUsages; } private List buildLateBindingMetadataUsages() @@ -149,10 +151,7 @@ namespace Il2CppInspector if (CheckMetadataUsageSanity(usage) && BinaryImage.TryMapFileOffsetToVA(i * ((uint)BinaryImage.Bits / 8), out var va)) - { - usage.SetAddress(va); - usages.Add(usage); - } + usages.Add(MetadataUsage.FromEncodedIndex(this, encodedToken, va)); } } diff --git a/Il2CppInspector.Common/IL2CPP/MetadataUsage.cs b/Il2CppInspector.Common/IL2CPP/MetadataUsage.cs index 5123ab4..e5b86eb 100644 --- a/Il2CppInspector.Common/IL2CPP/MetadataUsage.cs +++ b/Il2CppInspector.Common/IL2CPP/MetadataUsage.cs @@ -25,7 +25,7 @@ namespace Il2CppInspector { public MetadataUsageType Type { get; } public int SourceIndex { get; } - public ulong VirtualAddress { get; private set; } + public ulong VirtualAddress { get; } public readonly bool IsValid => Type != 0; @@ -55,7 +55,5 @@ namespace Il2CppInspector } return new MetadataUsage(usageType, (int)index, virtualAddress); } - - public void SetAddress(ulong virtualAddress) => VirtualAddress = virtualAddress; } } \ No newline at end of file diff --git a/Il2CppInspector.Common/Model/AppModel.cs b/Il2CppInspector.Common/Model/AppModel.cs index 1f3b3e3..923e6ee 100644 --- a/Il2CppInspector.Common/Model/AppModel.cs +++ b/Il2CppInspector.Common/Model/AppModel.cs @@ -105,7 +105,8 @@ namespace Il2CppInspector.Model } // Initialize - public AppModel(TypeModel model, bool makeDefaultBuild = true) { + public AppModel(TypeModel model, bool makeDefaultBuild = true) + { // Save .NET type model TypeModel = model;