From a3c0eca063be2654943506cb6b333da3ed6a9a2e Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 8 Nov 2022 11:52:24 -0800 Subject: [PATCH] Address some NE parsing issues --- BurnOutSharp.Builder/NewExecutable.cs | 12 ++++++++---- .../NewExecutable/ExecutableHeader.cs | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/BurnOutSharp.Builder/NewExecutable.cs b/BurnOutSharp.Builder/NewExecutable.cs index c23966bb..8e599648 100644 --- a/BurnOutSharp.Builder/NewExecutable.cs +++ b/BurnOutSharp.Builder/NewExecutable.cs @@ -47,6 +47,7 @@ namespace BurnOutSharp.Builder #region Executable Header // Try to parse the executable header + offset = (int)(initialOffset + stub.Header.NewExeHeaderAddr); var executableHeader = ParseExecutableHeader(data, offset); if (executableHeader == null) return null; @@ -203,10 +204,10 @@ namespace BurnOutSharp.Builder // TODO: Use marshalling here instead of building var header = new ExecutableHeader(); - header.Magic = new char[2]; + header.Magic = new byte[2]; for (int i = 0; i < header.Magic.Length; i++) { - header.Magic[i] = data.ReadChar(ref offset); + header.Magic[i] = data.ReadByte(ref offset); } if (header.Magic[0] != 'N' || header.Magic[1] != 'E') return null; @@ -320,6 +321,7 @@ namespace BurnOutSharp.Builder .ToList(); // Populate the type and name string dictionary + resourceTable.TypeAndNameStrings = new Dictionary(); for (int i = 0; i < stringOffsets.Count; i++) { int stringOffset = stringOffsets[i] + initialOffset; @@ -506,6 +508,7 @@ namespace BurnOutSharp.Builder #region Executable Header // Try to parse the executable header + data.Seek(initialOffset + stub.Header.NewExeHeaderAddr, SeekOrigin.Begin); var executableHeader = ParseExecutableHeader(data); if (executableHeader == null) return null; @@ -668,10 +671,10 @@ namespace BurnOutSharp.Builder // TODO: Use marshalling here instead of building var header = new ExecutableHeader(); - header.Magic = new char[2]; + header.Magic = new byte[2]; for (int i = 0; i < header.Magic.Length; i++) { - header.Magic[i] = data.ReadChar(); + header.Magic[i] = data.ReadByteValue(); } if (header.Magic[0] != 'N' || header.Magic[1] != 'E') return null; @@ -783,6 +786,7 @@ namespace BurnOutSharp.Builder .ToList(); // Populate the type and name string dictionary + resourceTable.TypeAndNameStrings = new Dictionary(); for (int i = 0; i < stringOffsets.Count; i++) { int stringOffset = (int)(stringOffsets[i] + initialOffset); diff --git a/BurnOutSharp.Models/NewExecutable/ExecutableHeader.cs b/BurnOutSharp.Models/NewExecutable/ExecutableHeader.cs index 7b6de0ab..898b323f 100644 --- a/BurnOutSharp.Models/NewExecutable/ExecutableHeader.cs +++ b/BurnOutSharp.Models/NewExecutable/ExecutableHeader.cs @@ -17,7 +17,7 @@ namespace BurnOutSharp.Models.NewExecutable /// "E" is high-order byte. /// [MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)] - public char[] Magic; + public byte[] Magic; /// /// Version number of the linker.