Fix metadata usage issues caused by it being a value type now
This commit is contained in:
@@ -108,13 +108,13 @@ namespace Il2CppInspector
|
|||||||
return buildLateBindingMetadataUsages();
|
return buildLateBindingMetadataUsages();
|
||||||
|
|
||||||
// Version >= 19 && < 27
|
// Version >= 19 && < 27
|
||||||
var usages = new Dictionary<uint, MetadataUsage>();
|
var usages = new Dictionary<uint, uint>();
|
||||||
foreach (var metadataUsageList in Metadata.MetadataUsageLists)
|
foreach (var metadataUsageList in Metadata.MetadataUsageLists)
|
||||||
{
|
{
|
||||||
for (var i = 0; i < metadataUsageList.Count; i++)
|
for (var i = 0; i < metadataUsageList.Count; i++)
|
||||||
{
|
{
|
||||||
var metadataUsagePair = Metadata.MetadataUsagePairs[metadataUsageList.Start + 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
|
// 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 count = usages.Keys.Max() + 1;
|
||||||
var addresses = Binary.Image.ReadMappedUWordArray(Binary.MetadataRegistration.MetadataUsages, (int) count);
|
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<MetadataUsage>();
|
||||||
|
foreach (var (index, encodedUsage) in usages)
|
||||||
|
metadataUsages.Add(MetadataUsage.FromEncodedIndex(this, encodedUsage, addresses[index]));
|
||||||
|
|
||||||
|
return metadataUsages;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<MetadataUsage> buildLateBindingMetadataUsages()
|
private List<MetadataUsage> buildLateBindingMetadataUsages()
|
||||||
@@ -149,10 +151,7 @@ namespace Il2CppInspector
|
|||||||
|
|
||||||
if (CheckMetadataUsageSanity(usage)
|
if (CheckMetadataUsageSanity(usage)
|
||||||
&& BinaryImage.TryMapFileOffsetToVA(i * ((uint)BinaryImage.Bits / 8), out var va))
|
&& BinaryImage.TryMapFileOffsetToVA(i * ((uint)BinaryImage.Bits / 8), out var va))
|
||||||
{
|
usages.Add(MetadataUsage.FromEncodedIndex(this, encodedToken, va));
|
||||||
usage.SetAddress(va);
|
|
||||||
usages.Add(usage);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace Il2CppInspector
|
|||||||
{
|
{
|
||||||
public MetadataUsageType Type { get; }
|
public MetadataUsageType Type { get; }
|
||||||
public int SourceIndex { get; }
|
public int SourceIndex { get; }
|
||||||
public ulong VirtualAddress { get; private set; }
|
public ulong VirtualAddress { get; }
|
||||||
|
|
||||||
public readonly bool IsValid => Type != 0;
|
public readonly bool IsValid => Type != 0;
|
||||||
|
|
||||||
@@ -55,7 +55,5 @@ namespace Il2CppInspector
|
|||||||
}
|
}
|
||||||
return new MetadataUsage(usageType, (int)index, virtualAddress);
|
return new MetadataUsage(usageType, (int)index, virtualAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SetAddress(ulong virtualAddress) => VirtualAddress = virtualAddress;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -105,7 +105,8 @@ namespace Il2CppInspector.Model
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Initialize
|
// Initialize
|
||||||
public AppModel(TypeModel model, bool makeDefaultBuild = true) {
|
public AppModel(TypeModel model, bool makeDefaultBuild = true)
|
||||||
|
{
|
||||||
// Save .NET type model
|
// Save .NET type model
|
||||||
TypeModel = model;
|
TypeModel = model;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user