From bb7b1c50a141733c80a800cf699d19c73ab15bfe Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 12 Feb 2026 16:07:04 -0500 Subject: [PATCH] Move debug object parsers --- .../Extensions/PortableExecutable.cs | 49 ------------------- .../Readers/PortableExecutable.cs | 43 ++++++++++++++++ .../Wrappers/PortableExecutable.cs | 4 +- 3 files changed, 45 insertions(+), 51 deletions(-) diff --git a/SabreTools.Serialization/Extensions/PortableExecutable.cs b/SabreTools.Serialization/Extensions/PortableExecutable.cs index c73f67ae..2d570fbc 100644 --- a/SabreTools.Serialization/Extensions/PortableExecutable.cs +++ b/SabreTools.Serialization/Extensions/PortableExecutable.cs @@ -1,8 +1,6 @@ using System; using SabreTools.Data.Models.COFF; -using SabreTools.IO.Extensions; -#pragma warning disable IDE0017 // Simplify object initialization namespace SabreTools.Data.Extensions { public static class PortableExecutable @@ -95,52 +93,5 @@ namespace SabreTools.Data.Extensions return -1; } - - #region Debug - - /// - /// Parse a byte array into a NB10ProgramDatabase - /// - /// Data to parse - /// Offset into the byte array - /// A filled NB10ProgramDatabase on success, null on error - public static Models.PortableExecutable.DebugData.NB10ProgramDatabase? ParseNB10ProgramDatabase(this byte[] data, ref int offset) - { - var obj = new Models.PortableExecutable.DebugData.NB10ProgramDatabase(); - - obj.Signature = data.ReadUInt32LittleEndian(ref offset); - if (obj.Signature != 0x3031424E) - return null; - - obj.Offset = data.ReadUInt32LittleEndian(ref offset); - obj.Timestamp = data.ReadUInt32LittleEndian(ref offset); - obj.Age = data.ReadUInt32LittleEndian(ref offset); - obj.PdbFileName = data.ReadNullTerminatedAnsiString(ref offset) ?? string.Empty; - - return obj; - } - - /// - /// Parse a byte array into a RSDSProgramDatabase - /// - /// Data to parse - /// Offset into the byte array - /// A filled RSDSProgramDatabase on success, null on error - public static Models.PortableExecutable.DebugData.RSDSProgramDatabase? ParseRSDSProgramDatabase(this byte[] data, ref int offset) - { - var obj = new Models.PortableExecutable.DebugData.RSDSProgramDatabase(); - - obj.Signature = data.ReadUInt32LittleEndian(ref offset); - if (obj.Signature != 0x53445352) - return null; - - obj.GUID = data.ReadGuid(ref offset); - obj.Age = data.ReadUInt32LittleEndian(ref offset); - obj.PathAndFileName = data.ReadNullTerminatedUTF8String(ref offset) ?? string.Empty; - - return obj; - } - - #endregion } } diff --git a/SabreTools.Serialization/Readers/PortableExecutable.cs b/SabreTools.Serialization/Readers/PortableExecutable.cs index 145d9144..c082a72f 100644 --- a/SabreTools.Serialization/Readers/PortableExecutable.cs +++ b/SabreTools.Serialization/Readers/PortableExecutable.cs @@ -2201,6 +2201,28 @@ namespace SabreTools.Serialization.Readers return obj; } + /// + /// Parse a byte array into a NB10ProgramDatabase + /// + /// Data to parse + /// Offset into the byte array + /// A filled NB10ProgramDatabase on success, null on error + public static Data.Models.PortableExecutable.DebugData.NB10ProgramDatabase? ParseNB10ProgramDatabase(byte[] data, ref int offset) + { + var obj = new Data.Models.PortableExecutable.DebugData.NB10ProgramDatabase(); + + obj.Signature = data.ReadUInt32LittleEndian(ref offset); + if (obj.Signature != 0x3031424E) + return null; + + obj.Offset = data.ReadUInt32LittleEndian(ref offset); + obj.Timestamp = data.ReadUInt32LittleEndian(ref offset); + obj.Age = data.ReadUInt32LittleEndian(ref offset); + obj.PdbFileName = data.ReadNullTerminatedAnsiString(ref offset) ?? string.Empty; + + return obj; + } + /// /// Parse a byte array into a NormalMenuHeader /// @@ -2607,6 +2629,27 @@ namespace SabreTools.Serialization.Readers return obj; } + /// + /// Parse a byte array into a RSDSProgramDatabase + /// + /// Data to parse + /// Offset into the byte array + /// A filled RSDSProgramDatabase on success, null on error + public static Data.Models.PortableExecutable.DebugData.RSDSProgramDatabase? ParseRSDSProgramDatabase(byte[] data, ref int offset) + { + var obj = new Data.Models.PortableExecutable.DebugData.RSDSProgramDatabase(); + + obj.Signature = data.ReadUInt32LittleEndian(ref offset); + if (obj.Signature != 0x53445352) + return null; + + obj.GUID = data.ReadGuid(ref offset); + obj.Age = data.ReadUInt32LittleEndian(ref offset); + obj.PathAndFileName = data.ReadNullTerminatedUTF8String(ref offset) ?? string.Empty; + + return obj; + } + /// /// Parse a Stream into a SectionDefinition /// diff --git a/SabreTools.Serialization/Wrappers/PortableExecutable.cs b/SabreTools.Serialization/Wrappers/PortableExecutable.cs index 97d77549..29d49472 100644 --- a/SabreTools.Serialization/Wrappers/PortableExecutable.cs +++ b/SabreTools.Serialization/Wrappers/PortableExecutable.cs @@ -1485,7 +1485,7 @@ namespace SabreTools.Serialization.Wrappers // NB10 if (signature == 0x3031424E) { - var nb10ProgramDatabase = entryData.ParseNB10ProgramDatabase(ref offset); + var nb10ProgramDatabase = Readers.PortableExecutable.ParseNB10ProgramDatabase(entryData, ref offset); if (nb10ProgramDatabase is not null) { debugData[i] = nb10ProgramDatabase; @@ -1496,7 +1496,7 @@ namespace SabreTools.Serialization.Wrappers // RSDS else if (signature == 0x53445352) { - var rsdsProgramDatabase = entryData.ParseRSDSProgramDatabase(ref offset); + var rsdsProgramDatabase = Readers.PortableExecutable.ParseRSDSProgramDatabase(entryData, ref offset); if (rsdsProgramDatabase is not null) { debugData[i] = rsdsProgramDatabase;