diff --git a/SabreTools.Serialization/Extensions.PortableExecutable.cs b/SabreTools.Serialization/Extensions.PortableExecutable.cs
index b1604ead..d24e1815 100644
--- a/SabreTools.Serialization/Extensions.PortableExecutable.cs
+++ b/SabreTools.Serialization/Extensions.PortableExecutable.cs
@@ -92,6 +92,65 @@ namespace SabreTools.Serialization
return -1;
}
+ #region Debug
+
+ ///
+ /// Read debug data as an NB10 Program Database
+ ///
+ /// Data to parse into a database
+ /// Offset into the byte array
+ /// A filled NB10 Program Database on success, null on error
+ public static NB10ProgramDatabase? AsNB10ProgramDatabase(this byte[] data, ref int offset)
+ {
+ // If we have data that's invalid, we can't do anything
+ if (data == null)
+ return null;
+
+ var nb10ProgramDatabase = new NB10ProgramDatabase();
+
+ nb10ProgramDatabase.Signature = data.ReadUInt32(ref offset);
+ if (nb10ProgramDatabase.Signature != 0x3031424E)
+ return null;
+
+ nb10ProgramDatabase.Offset = data.ReadUInt32(ref offset);
+ nb10ProgramDatabase.Timestamp = data.ReadUInt32(ref offset);
+ nb10ProgramDatabase.Age = data.ReadUInt32(ref offset);
+ nb10ProgramDatabase.PdbFileName = data.ReadString(ref offset, Encoding.ASCII); // TODO: Actually null-terminated UTF-8?
+
+ return nb10ProgramDatabase;
+ }
+
+ ///
+ /// Read debug data as an RSDS Program Database
+ ///
+ /// Data to parse into a database
+ /// Offset into the byte array
+ /// A filled RSDS Program Database on success, null on error
+ public static RSDSProgramDatabase? AsRSDSProgramDatabase(this byte[]? data, ref int offset)
+ {
+ // If we have data that's invalid, we can't do anything
+ if (data == null)
+ return null;
+
+ var rsdsProgramDatabase = new RSDSProgramDatabase();
+
+ rsdsProgramDatabase.Signature = data.ReadUInt32(ref offset);
+ if (rsdsProgramDatabase.Signature != 0x53445352)
+ return null;
+
+ var guid = data.ReadBytes(ref offset, 0x10);
+ if (guid != null)
+ rsdsProgramDatabase.GUID = new Guid(guid);
+ rsdsProgramDatabase.Age = data.ReadUInt32(ref offset);
+ rsdsProgramDatabase.PathAndFileName = data.ReadString(ref offset, Encoding.ASCII); // TODO: Actually null-terminated UTF-8
+
+ return rsdsProgramDatabase;
+ }
+
+ #endregion
+
+ #region Overlay
+
///
/// Read overlay data as a SecuROM AddD overlay data
///
@@ -153,61 +212,6 @@ namespace SabreTools.Serialization
return addD;
}
- #region Debug
-
- ///
- /// Read debug data as an NB10 Program Database
- ///
- /// Data to parse into a database
- /// Offset into the byte array
- /// A filled NB10 Program Database on success, null on error
- public static NB10ProgramDatabase? AsNB10ProgramDatabase(this byte[] data, ref int offset)
- {
- // If we have data that's invalid, we can't do anything
- if (data == null)
- return null;
-
- var nb10ProgramDatabase = new NB10ProgramDatabase();
-
- nb10ProgramDatabase.Signature = data.ReadUInt32(ref offset);
- if (nb10ProgramDatabase.Signature != 0x3031424E)
- return null;
-
- nb10ProgramDatabase.Offset = data.ReadUInt32(ref offset);
- nb10ProgramDatabase.Timestamp = data.ReadUInt32(ref offset);
- nb10ProgramDatabase.Age = data.ReadUInt32(ref offset);
- nb10ProgramDatabase.PdbFileName = data.ReadString(ref offset, Encoding.ASCII); // TODO: Actually null-terminated UTF-8?
-
- return nb10ProgramDatabase;
- }
-
- ///
- /// Read debug data as an RSDS Program Database
- ///
- /// Data to parse into a database
- /// Offset into the byte array
- /// A filled RSDS Program Database on success, null on error
- public static RSDSProgramDatabase? AsRSDSProgramDatabase(this byte[]? data, ref int offset)
- {
- // If we have data that's invalid, we can't do anything
- if (data == null)
- return null;
-
- var rsdsProgramDatabase = new RSDSProgramDatabase();
-
- rsdsProgramDatabase.Signature = data.ReadUInt32(ref offset);
- if (rsdsProgramDatabase.Signature != 0x53445352)
- return null;
-
- var guid = data.ReadBytes(ref offset, 0x10);
- if (guid != null)
- rsdsProgramDatabase.GUID = new Guid(guid);
- rsdsProgramDatabase.Age = data.ReadUInt32(ref offset);
- rsdsProgramDatabase.PathAndFileName = data.ReadString(ref offset, Encoding.ASCII); // TODO: Actually null-terminated UTF-8
-
- return rsdsProgramDatabase;
- }
-
#endregion
// TODO: Implement other resource types from https://learn.microsoft.com/en-us/windows/win32/menurc/resource-file-formats