From 3982e5fd9929a20bd15afb37e668ec197054d4c8 Mon Sep 17 00:00:00 2001 From: LukeFZ <17146677+LukeFZ@users.noreply.github.com> Date: Sat, 9 Nov 2024 15:43:39 +0100 Subject: [PATCH] Make field offset reading use TryMapVATR to reduce exceptions --- .../IL2CPP/Il2CppInspector.cs | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs b/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs index 3ffc749..9ee970f 100644 --- a/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs +++ b/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs @@ -203,19 +203,21 @@ namespace Il2CppInspector for (var i = 0; i < TypeDefinitions.Length; i++) { var def = TypeDefinitions[i]; var pFieldOffsets = Binary.FieldOffsetPointers[i]; - if (pFieldOffsets != 0) { - bool available = true; - + if (pFieldOffsets != 0) + { // If the target address range is not mapped in the file, assume zeroes - try { - BinaryImage.Position = BinaryImage.MapVATR((ulong) pFieldOffsets); + if (BinaryImage.TryMapVATR((ulong)pFieldOffsets, out var fieldOffsetPosition)) + { + BinaryImage.Position = fieldOffsetPosition; + var fieldOffsets = BinaryImage.ReadArray(def.FieldCount); + for (var fieldIndex = 0; fieldIndex < def.FieldCount; fieldIndex++) + offsets.Add(def.FieldIndex + fieldIndex, fieldOffsets[fieldIndex]); } - catch (InvalidOperationException) { - available = false; + else + { + for (var fieldIndex = 0; fieldIndex < def.FieldCount; fieldIndex++) + offsets.Add(def.FieldIndex + fieldIndex, 0); } - - for (var f = 0; f < def.FieldCount; f++) - offsets.Add(def.FieldIndex + f, available? BinaryImage.ReadUInt32() : 0); } }