diff --git a/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs b/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs index 3ffc7491..9ee970f0 100644 --- a/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs +++ b/Il2CppInspector.Common/IL2CPP/Il2CppInspector.cs @@ -203,19 +203,21 @@ public Il2CppInspector(Il2CppBinary binary, Metadata metadata) { 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); } }