From 7cb150606cc73f865953884af925f8052804ec52 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 4 Nov 2022 21:00:02 -0700 Subject: [PATCH] Add LE/LX fix-up record table --- .../LinearExecutable/Executable.cs | 5 +- .../LinearExecutable/FixupRecordTableEntry.cs | 83 ++++++++++++++++--- 2 files changed, 75 insertions(+), 13 deletions(-) diff --git a/BurnOutSharp.Models/LinearExecutable/Executable.cs b/BurnOutSharp.Models/LinearExecutable/Executable.cs index b2ea7731..e9382f07 100644 --- a/BurnOutSharp.Models/LinearExecutable/Executable.cs +++ b/BurnOutSharp.Models/LinearExecutable/Executable.cs @@ -67,7 +67,10 @@ namespace BurnOutSharp.Models.LinearExecutable /// public FixupPageTableEntry[] FixupPageTable { get; set; } - // TODO: Fix-up record table + /// + /// Fix-up record table + /// + public FixupRecordTableEntry[] FixupRecordTable { get; set; } /// /// Import module name table diff --git a/BurnOutSharp.Models/LinearExecutable/FixupRecordTableEntry.cs b/BurnOutSharp.Models/LinearExecutable/FixupRecordTableEntry.cs index 20293531..5c5d461e 100644 --- a/BurnOutSharp.Models/LinearExecutable/FixupRecordTableEntry.cs +++ b/BurnOutSharp.Models/LinearExecutable/FixupRecordTableEntry.cs @@ -1,6 +1,4 @@ -using System.Runtime.InteropServices; - -namespace BurnOutSharp.Models.LinearExecutable +namespace BurnOutSharp.Models.LinearExecutable { /// /// The Fixup Record Table contains entries for all fixups in the linear EXE module. @@ -236,14 +234,62 @@ namespace BurnOutSharp.Models.LinearExecutable #region MOD ORD# / IMPORT ORD / ADDITIVE - /* - TODO: Implement IMPORT ORD - IMPORT ORD = D[B|W|D] Imported ordinal number. - This is the imported procedure's ordinal number. It is a Byte value when the - '8-bit Ordinal' bit in the target flags field is set. Otherwise it is a Word value - when the '32-bit Target Offset Flag' bit in the target flags field is clear and a - Dword value when the bit is set. - */ + #region 8-bit Ordinal Flag + + #region Set + + /// + /// Imported ordinal number. + /// + /// + /// This is the imported procedure's ordinal number. It is a Byte value when the + /// '8-bit Ordinal' bit in the target flags field is set. Otherwise it is a Word value + /// when the '32-bit Target Offset Flag' bit in the target flags field is clear and a + /// Dword value when the bit is set. + /// + public byte ImportedOrdinalNumberByte; + + #endregion + + #region Unset + + #region 32-bit Target Offset Flag + + #region Set + + /// + /// Imported ordinal number. + /// + /// + /// This is the imported procedure's ordinal number. It is a Byte value when the + /// '8-bit Ordinal' bit in the target flags field is set. Otherwise it is a Word value + /// when the '32-bit Target Offset Flag' bit in the target flags field is clear and a + /// Dword value when the bit is set. + /// + public uint ImportedOrdinalNumberDWORD; + + #endregion + + #region Unset + + /// + /// Imported ordinal number. + /// + /// + /// This is the imported procedure's ordinal number. It is a Byte value when the + /// '8-bit Ordinal' bit in the target flags field is set. Otherwise it is a Word value + /// when the '32-bit Target Offset Flag' bit in the target flags field is clear and a + /// Dword value when the bit is set. + /// + public uint ImportedOrdinalNumberWORD; + + #endregion + + #endregion + + #endregion + + #endregion #endregion @@ -299,6 +345,19 @@ namespace BurnOutSharp.Models.LinearExecutable #endregion - // TODO: Implement SRCOFFn + #region SCROFFn + + /// + /// Source offset list. + /// + /// + /// This list is present if the Source List Flag is set in the Target Flags field. + /// The number of entries in the source offset list is defined in the SRCOFF/CNT + /// field. The source offsets are relative to the beginning of the page where the + /// fixups are to be made. + /// + public ushort[] SourceOffsetList; + + #endregion } }