From 9c173fd3a1c736f37bfa4dfeb6527cceb82aa336 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 12 Dec 2022 21:40:29 -0800 Subject: [PATCH] Update extension method for AddD section --- BurnOutSharp.Builder/Extensions.cs | 27 +++++++++++-------- .../PortableExecutable/SecuROMAddD.cs | 2 +- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/BurnOutSharp.Builder/Extensions.cs b/BurnOutSharp.Builder/Extensions.cs index 2d6b6243..20fefde7 100644 --- a/BurnOutSharp.Builder/Extensions.cs +++ b/BurnOutSharp.Builder/Extensions.cs @@ -410,20 +410,25 @@ namespace BurnOutSharp.Builder if (addD.Signature != 0x44646441) return null; + int originalOffset = offset; + addD.EntryCount = data.ReadUInt32(ref offset); addD.Version = data.ReadString(ref offset, Encoding.ASCII); + if (string.IsNullOrWhiteSpace(addD.Version)) + offset = originalOffset + 0x10; + addD.Build = data.ReadBytes(ref offset, 4).Select(b => (char)b).ToArray(); - addD.Unknown14h = data.ReadUInt32(ref offset); - addD.Unknown18h = data.ReadUInt32(ref offset); - addD.Unknown1Ch = data.ReadUInt32(ref offset); - addD.Unknown20h = data.ReadUInt32(ref offset); - addD.Unknown24h = data.ReadUInt32(ref offset); - addD.Unknown28h = data.ReadUInt32(ref offset); - addD.Unknown2Ch = data.ReadUInt32(ref offset); - addD.Unknown30h = data.ReadUInt32(ref offset); - addD.Unknown34h = data.ReadUInt32(ref offset); - addD.Unknown38h = data.ReadUInt32(ref offset); - addD.Unknown3Ch = data.ReadUInt32(ref offset); + + // Distinguish between v1 and v2 + int bytesToRead = 112; // v2 + if (string.IsNullOrWhiteSpace(addD.Version) + || addD.Version.StartsWith("3") + || addD.Version.StartsWith("4.47")) + { + bytesToRead = 44; + } + + addD.Unknown14h = data.ReadBytes(ref offset, bytesToRead); addD.Entries = new Models.PortableExecutable.SecuROMAddDEntry[addD.EntryCount]; for (int i = 0; i < addD.EntryCount; i++) diff --git a/BurnOutSharp.Models/PortableExecutable/SecuROMAddD.cs b/BurnOutSharp.Models/PortableExecutable/SecuROMAddD.cs index 9e022ec2..0b3f077f 100644 --- a/BurnOutSharp.Models/PortableExecutable/SecuROMAddD.cs +++ b/BurnOutSharp.Models/PortableExecutable/SecuROMAddD.cs @@ -28,7 +28,7 @@ namespace BurnOutSharp.Models.PortableExecutable public uint EntryCount; /// - /// Version + /// Version, always 8 bytes? /// public string Version;