Move debug object parsers

This commit is contained in:
Matt Nadareski
2026-02-12 16:07:04 -05:00
parent d56c8a3d83
commit bb7b1c50a1
3 changed files with 45 additions and 51 deletions

View File

@@ -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
/// <summary>
/// Parse a byte array into a NB10ProgramDatabase
/// </summary>
/// <param name="data">Data to parse</param>
/// <param name="offset">Offset into the byte array</param>
/// <returns>A filled NB10ProgramDatabase on success, null on error</returns>
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;
}
/// <summary>
/// Parse a byte array into a RSDSProgramDatabase
/// </summary>
/// <param name="data">Data to parse</param>
/// <param name="offset">Offset into the byte array</param>
/// <returns>A filled RSDSProgramDatabase on success, null on error</returns>
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
}
}

View File

@@ -2201,6 +2201,28 @@ namespace SabreTools.Serialization.Readers
return obj;
}
/// <summary>
/// Parse a byte array into a NB10ProgramDatabase
/// </summary>
/// <param name="data">Data to parse</param>
/// <param name="offset">Offset into the byte array</param>
/// <returns>A filled NB10ProgramDatabase on success, null on error</returns>
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;
}
/// <summary>
/// Parse a byte array into a NormalMenuHeader
/// </summary>
@@ -2607,6 +2629,27 @@ namespace SabreTools.Serialization.Readers
return obj;
}
/// <summary>
/// Parse a byte array into a RSDSProgramDatabase
/// </summary>
/// <param name="data">Data to parse</param>
/// <param name="offset">Offset into the byte array</param>
/// <returns>A filled RSDSProgramDatabase on success, null on error</returns>
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;
}
/// <summary>
/// Parse a Stream into a SectionDefinition
/// </summary>

View File

@@ -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;