diff --git a/BurnOutSharp.Models/LinearExecutable/Executable.cs b/BurnOutSharp.Models/LinearExecutable/Executable.cs index 504b9d98..e1d62628 100644 --- a/BurnOutSharp.Models/LinearExecutable/Executable.cs +++ b/BurnOutSharp.Models/LinearExecutable/Executable.cs @@ -49,7 +49,10 @@ namespace BurnOutSharp.Models.LinearExecutable /// public ModuleFormatDirectivesTableEntry[] ModuleFormatDirectivesTable { get; set; } - // TODO: Verify Record directives table + /// + /// Verify record directive table (optional) + /// + public VerifyRecordDirectiveTableEntry[] VerifyRecordDirectiveTable { get; set; } /// /// Per-Page checksum table diff --git a/BurnOutSharp.Models/LinearExecutable/VerifyRecordDirectiveTableEntry.cs b/BurnOutSharp.Models/LinearExecutable/VerifyRecordDirectiveTableEntry.cs new file mode 100644 index 00000000..f399a93c --- /dev/null +++ b/BurnOutSharp.Models/LinearExecutable/VerifyRecordDirectiveTableEntry.cs @@ -0,0 +1,85 @@ +using System.Runtime.InteropServices; + +namespace BurnOutSharp.Models.LinearExecutable +{ + /// + /// The Verify Record Directive Table is an optional table. It maintains a record + /// of the pages in the EXE file that have been fixed up and written back to the + /// original linear EXE module, along with the module dependencies used to perform + /// these fixups. This table provides an efficient means for verifying the virtual + /// addresses required for the fixed up pages when the module is loaded. + /// + /// + /// + [StructLayout(LayoutKind.Sequential)] + public class VerifyRecordDirectiveTableEntry + { + /// + /// Number of module dependencies. + /// + /// + /// This field specifies how many entries there are in the verify record + /// directive table. This is equal to the number of modules referenced by + /// this module. + /// + public ushort EntryCount; + + /// + /// Ordinal index into the Import Module Name Table. + /// + /// + /// This value is an ordered index in to the Import Module Name Table for + /// the referenced module. + /// + public ushort OrdinalIndex; + + /// + /// Module Version. + /// + /// + /// This is the version of the referenced module that the fixups were + /// originally performed.This is used to insure the same version of the + /// referenced module is loaded that was fixed up in this module and + /// therefore the fixups are still correct. This requires the version + /// number in a module to be incremented anytime the entry point offsets + /// change. + /// + public ushort Version; + + /// + /// Module # of Object Entries. + /// + /// + /// This field is used to identify the number of object verify entries + /// that follow for the referenced module. + /// + public ushort ObjectEntriesCount; + + /// + /// Object # in Module. + /// + /// + /// This field specifies the object number in the referenced module that + /// is being verified. + /// + public ushort ObjectNumberInModule; + + /// + /// Object load base address. + /// + /// + /// This is the address that the object was loaded at when the fixups were + /// performed. + /// + public ushort ObjectLoadBaseAddress; + + /// + /// Object virtual address size. + /// + /// + /// This field specifies the total amount of virtual memory required for + /// this object. + /// + public ushort ObjectVirtualAddressSize; + } +}