diff --git a/SabreTools.Serialization/Extensions/PortableExecutable.cs b/SabreTools.Serialization/Extensions/PortableExecutable.cs
index cbebdd36..ad4152b7 100644
--- a/SabreTools.Serialization/Extensions/PortableExecutable.cs
+++ b/SabreTools.Serialization/Extensions/PortableExecutable.cs
@@ -149,80 +149,6 @@ namespace SabreTools.Data.Extensions
#endregion
- #region Overlay
-
- ///
- /// Parse a byte array into a SecuROMAddD
- ///
- /// Data to parse into overlay data
- /// Offset into the byte array
- /// A filled SecuROMAddD on success, null on error
- public static AddD? ParseSecuROMAddD(this byte[] data, ref int offset)
- {
- // Read in the table
- var obj = new AddD();
-
- obj.Signature = data.ReadUInt32LittleEndian(ref offset);
- if (obj.Signature != 0x44646441)
- return null;
-
- int originalOffset = offset;
-
- obj.EntryCount = data.ReadUInt32LittleEndian(ref offset);
- obj.Version = data.ReadNullTerminatedAnsiString(ref offset);
- if (string.IsNullOrEmpty(obj.Version))
- offset = originalOffset + 0x10;
-
- var buildBytes = data.ReadBytes(ref offset, 4);
- var buildChars = Array.ConvertAll(buildBytes, b => (char)b);
- obj.Build = buildChars;
-
- // Distinguish between v1 and v2
- int bytesToRead = 112; // v2
- if (string.IsNullOrEmpty(obj.Version)
- || obj.Version!.StartsWith("3")
- || obj.Version.StartsWith("4.47"))
- {
- bytesToRead = 44;
- }
-
- obj.Unknown14h = data.ReadBytes(ref offset, bytesToRead);
-
- obj.Entries = new AddDEntry[obj.EntryCount];
- for (int i = 0; i < obj.EntryCount; i++)
- {
- obj.Entries[i] = ParseSecuROMAddDEntry(data, ref offset);
- }
-
- return obj;
- }
-
- ///
- /// Parse a byte array into a SecuROMAddDEntry
- ///
- /// Data to parse
- /// Offset into the byte array
- /// Filled SecuROMAddDEntry on success, null on error
- public static AddDEntry ParseSecuROMAddDEntry(this byte[] data, ref int offset)
- {
- var obj = new AddDEntry();
-
- obj.PhysicalOffset = data.ReadUInt32LittleEndian(ref offset);
- obj.Length = data.ReadUInt32LittleEndian(ref offset);
- obj.Unknown08h = data.ReadUInt32LittleEndian(ref offset);
- obj.Unknown0Ch = data.ReadUInt32LittleEndian(ref offset);
- obj.Unknown10h = data.ReadUInt32LittleEndian(ref offset);
- obj.Unknown14h = data.ReadUInt32LittleEndian(ref offset);
- obj.Unknown18h = data.ReadUInt32LittleEndian(ref offset);
- obj.Unknown1Ch = data.ReadUInt32LittleEndian(ref offset);
- obj.FileName = data.ReadNullTerminatedAnsiString(ref offset);
- obj.Unknown2Ch = data.ReadUInt32LittleEndian(ref offset);
-
- return obj;
- }
-
- #endregion
-
// TODO: Implement other resource types from https://learn.microsoft.com/en-us/windows/win32/menurc/resource-file-formats
#region Resources
diff --git a/SabreTools.Serialization/Models/SecuROM/AddD.cs b/SabreTools.Serialization/Models/SecuROM/AddD.cs
index 0709578b..e1761801 100644
--- a/SabreTools.Serialization/Models/SecuROM/AddD.cs
+++ b/SabreTools.Serialization/Models/SecuROM/AddD.cs
@@ -1,6 +1,4 @@
-using System.Runtime.InteropServices;
-
-namespace SabreTools.Data.Models.SecuROM
+namespace SabreTools.Data.Models.SecuROM
{
///
/// Overlay data associated with SecuROM executables
@@ -27,16 +25,16 @@ namespace SabreTools.Data.Models.SecuROM
public uint EntryCount { get; set; }
///
- /// Version, always 8 bytes?
+ /// Version, null-terminated
///
- [MarshalAs(UnmanagedType.LPStr)]
- public string? Version;
+ /// Always 8 bytes?
+ public string? Version { get; set; }
///
- /// Unknown (Build? Formatted as a string)
+ /// Build number
///
- [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
- public char[]? Build;
+ /// 4 bytes
+ public string? Build { get; set; }
///
/// Unknown (0x14h), Variable number of bytes before entry table
@@ -45,13 +43,13 @@ namespace SabreTools.Data.Models.SecuROM
/// 44 bytes in EXPUNGED, 3.17.00.0017, 3.17.00.0019, 4.47.00.0039
/// 112 bytes in 4.84.00.0054, 4.84.69.0037, 4.84.76.7966, 4.84.76.7968, 4.85.07.0009
/// 112 byte range contains a fixed-length string at 0x2C, possibly a product ID?
- /// "801400-001" in 4.84.00.0054
- /// "594130-001" in 4.84.69.0037
- /// "554900-001" in 4.84.76.7966
- /// "554900-001" in 4.84.76.7968
- /// "548520-001" in 4.85.07.0009
+ /// "801400-001" in 4.84.00.0054
+ /// "594130-001" in 4.84.69.0037
+ /// "554900-001" in 4.84.76.7966
+ /// "554900-001" in 4.84.76.7968
+ /// "548520-001" in 4.85.07.0009
///
- public byte[]? Unknown14h { get; set; }
+ public byte[]? Unknown { get; set; }
///
/// Entry table
diff --git a/SabreTools.Serialization/Readers/SecuROMAddD.cs b/SabreTools.Serialization/Readers/SecuROMAddD.cs
index 2b081640..771c4e06 100644
--- a/SabreTools.Serialization/Readers/SecuROMAddD.cs
+++ b/SabreTools.Serialization/Readers/SecuROMAddD.cs
@@ -19,7 +19,7 @@ namespace SabreTools.Serialization.Readers
// Cache the current offset
long initialOffset = data.Position;
- var addD = ParseSecuROMAddD(data);
+ var addD = ParseAddD(data);
if (addD.Signature != 0x44646441)
return null;
@@ -33,11 +33,11 @@ namespace SabreTools.Serialization.Readers
}
///
- /// Parse a Stream into an SecuROMAddD
+ /// Parse a Stream into an AddD
///
/// Stream to parse
- /// Filled SecuROMAddD on success, null on error
- private static AddD ParseSecuROMAddD(Stream data)
+ /// Filled AddD on success, null on error
+ private static AddD ParseAddD(Stream data)
{
var obj = new AddD();
@@ -45,14 +45,15 @@ namespace SabreTools.Serialization.Readers
obj.EntryCount = data.ReadUInt32LittleEndian();
obj.Version = data.ReadNullTerminatedAnsiString();
byte[] buildBytes = data.ReadBytes(4);
- string buildStr = Encoding.ASCII.GetString(buildBytes);
- obj.Build = buildStr.ToCharArray();
- obj.Unknown14h = data.ReadBytes(1); // TODO: Figure out how to determine how many bytes are here consistently
+ obj.Build = Encoding.ASCII.GetString(buildBytes);
+
+ // TODO: Figure out how to determine how many bytes are here consistently
+ obj.Unknown = data.ReadBytes(1);
obj.Entries = new AddDEntry[obj.EntryCount];
for (int i = 0; i < obj.Entries.Length; i++)
{
- var entry = ParseSecuROMAddDEntry(data);
+ var entry = ParseAddDEntry(data);
obj.Entries[i] = entry;
}
@@ -60,11 +61,11 @@ namespace SabreTools.Serialization.Readers
}
///
- /// Parse a Stream into an SecuROMAddDEntry
+ /// Parse a Stream into an AddDEntry
///
/// Stream to parse
- /// Filled SecuROMAddDEntry on success, null on error
- private static AddDEntry ParseSecuROMAddDEntry(Stream data)
+ /// Filled AddDEntry on success, null on error
+ private static AddDEntry ParseAddDEntry(Stream data)
{
var obj = new AddDEntry();