mirror of
https://github.com/SabreTools/SabreTools.Models.git
synced 2026-09-25 08:06:48 +00:00
Migrate many models to StructLayout
This commit is contained in:
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The Fixup Page Table provides a simple mapping of a logical page number
|
||||
@@ -15,6 +17,7 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class FixupPageTableEntry
|
||||
{
|
||||
/// <summary>
|
||||
@@ -28,6 +31,6 @@
|
||||
/// This field specifies the offset following the last fixup record in the
|
||||
/// fixup record table. This is the last entry in the fixup page table. (n + 1)
|
||||
/// </remarks>
|
||||
public uint Offset { get; set; }
|
||||
public uint Offset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The `information block` in the LE header contains the linker version number,
|
||||
@@ -10,6 +12,7 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
|
||||
public sealed class InformationBlock
|
||||
{
|
||||
/// <summary>
|
||||
@@ -21,7 +24,8 @@
|
||||
/// The signature word is used by the loader to identify the EXE
|
||||
/// file as a valid 32-bit Linear Executable Module Format.
|
||||
/// </remarks>
|
||||
public string? Signature { get; set; }
|
||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 2)]
|
||||
public string? Signature;
|
||||
|
||||
/// <summary>
|
||||
/// Byte Ordering.
|
||||
@@ -29,7 +33,8 @@
|
||||
/// <remarks>
|
||||
/// This byte specifies the byte ordering for the linear EXE format.
|
||||
/// </remarks>
|
||||
public ByteOrder ByteOrder { get; set; }
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
public ByteOrder ByteOrder;
|
||||
|
||||
/// <summary>
|
||||
/// Word Ordering.
|
||||
@@ -37,7 +42,8 @@
|
||||
/// <remarks>
|
||||
/// This byte specifies the Word ordering for the linear EXE format.
|
||||
/// </remarks>
|
||||
public WordOrder WordOrder { get; set; }
|
||||
[MarshalAs(UnmanagedType.U1)]
|
||||
public WordOrder WordOrder;
|
||||
|
||||
/// <summary>
|
||||
/// Linear EXE Format Level.
|
||||
@@ -49,7 +55,7 @@
|
||||
/// future EXE file versions so that an appropriate error message may be
|
||||
/// displayed if an attempt is made to load them.
|
||||
/// </remarks>
|
||||
public uint ExecutableFormatLevel { get; set; }
|
||||
public uint ExecutableFormatLevel;
|
||||
|
||||
/// <summary>
|
||||
/// Module CPU Type.
|
||||
@@ -57,7 +63,8 @@
|
||||
/// <remarks>
|
||||
/// This field specifies the type of CPU required by this module to run.
|
||||
/// </remarks>
|
||||
public CPUType CPUType { get; set; }
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
public CPUType CPUType;
|
||||
|
||||
/// <summary>
|
||||
/// Module OS Type.
|
||||
@@ -65,7 +72,8 @@
|
||||
/// <remarks>
|
||||
/// This field specifies the type of Operating system required to run this module.
|
||||
/// </remarks>
|
||||
public OperatingSystem ModuleOS { get; set; }
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
public OperatingSystem ModuleOS;
|
||||
|
||||
/// <summary>
|
||||
/// Module version
|
||||
@@ -74,12 +82,13 @@
|
||||
/// This is useful for differentiating between revisions of dynamic linked modules.
|
||||
/// This value is specified at link time by the user.
|
||||
/// </remarks>
|
||||
public uint ModuleVersion { get; set; }
|
||||
public uint ModuleVersion;
|
||||
|
||||
/// <summary>
|
||||
/// Module type flags
|
||||
/// </summary>
|
||||
public ModuleFlags ModuleTypeFlags { get; set; }
|
||||
[MarshalAs(UnmanagedType.U4)]
|
||||
public ModuleFlags ModuleTypeFlags;
|
||||
|
||||
/// <summary>
|
||||
/// Number of pages in module.
|
||||
@@ -94,7 +103,7 @@
|
||||
/// EXE module. This is used to determine the size of the page information tables
|
||||
/// in the linear EXE module.
|
||||
/// </remarks>
|
||||
public uint ModuleNumberPages { get; set; }
|
||||
public uint ModuleNumberPages;
|
||||
|
||||
/// <summary>
|
||||
/// The Object number to which the Entry Address is relative.
|
||||
@@ -109,7 +118,7 @@
|
||||
/// is set, then the object to which this field refers must be a 32-bit object (i.e.,
|
||||
/// the Big/Default bit must be set in the object flags; see below).
|
||||
/// </remarks>
|
||||
public uint InitialObjectCS { get; set; }
|
||||
public uint InitialObjectCS;
|
||||
|
||||
/// <summary>
|
||||
/// Entry Address of module.
|
||||
@@ -118,7 +127,7 @@
|
||||
/// The Entry Address is the starting address for program modules and the library
|
||||
/// initialization and Library termination address for library modules.
|
||||
/// </remarks>
|
||||
public uint InitialEIP { get; set; }
|
||||
public uint InitialEIP;
|
||||
|
||||
/// <summary>
|
||||
/// The Object number to which the ESP is relative.
|
||||
@@ -128,7 +137,7 @@
|
||||
/// nonzero value for a program module to be correctly loaded. This field is ignored
|
||||
/// for a library module.
|
||||
/// </remarks>
|
||||
public uint InitialObjectSS { get; set; }
|
||||
public uint InitialObjectSS;
|
||||
|
||||
/// <summary>
|
||||
/// Starting stack address of module.
|
||||
@@ -138,7 +147,7 @@
|
||||
/// value in this field indicates that the stack pointer is to be initialized to the
|
||||
/// highest address/offset in the object. This field is ignored for a library module.
|
||||
/// </remarks>
|
||||
public uint InitialESP { get; set; }
|
||||
public uint InitialESP;
|
||||
|
||||
/// <summary>
|
||||
/// The size of one page for this system.
|
||||
@@ -148,7 +157,7 @@
|
||||
/// For the initial version of this linear EXE format the page size is 4Kbytes.
|
||||
/// (The 4K page size is specified by a value of 4096 in this field.)
|
||||
/// </remarks>
|
||||
public uint MemoryPageSize { get; set; }
|
||||
public uint MemoryPageSize;
|
||||
|
||||
/// <summary>
|
||||
/// The shift left bits for page offsets.
|
||||
@@ -162,7 +171,7 @@
|
||||
/// 512 byte (disk sector) basis. The default value for this field is 12 (decimal),
|
||||
/// which give a 4096 byte alignment. All other offsets are byte aligned.
|
||||
/// </remarks>
|
||||
public uint BytesOnLastPage { get; set; }
|
||||
public uint BytesOnLastPage;
|
||||
|
||||
/// <summary>
|
||||
/// Total size of the fixup information in bytes.
|
||||
@@ -174,7 +183,7 @@
|
||||
/// - Import Module name Table
|
||||
/// - Import Procedure Name Table
|
||||
/// </remarks>
|
||||
public uint FixupSectionSize { get; set; }
|
||||
public uint FixupSectionSize;
|
||||
|
||||
/// <summary>
|
||||
/// Checksum for fixup information.
|
||||
@@ -185,7 +194,7 @@
|
||||
/// not always loaded into main memory with the 'loader section'. If the checksum
|
||||
/// feature is not implemented, then the linker will set these fields to zero.
|
||||
/// </remarks>
|
||||
public uint FixupSectionChecksum { get; set; }
|
||||
public uint FixupSectionChecksum;
|
||||
|
||||
/// <summary>
|
||||
/// Size of memory resident tables.
|
||||
@@ -195,7 +204,7 @@
|
||||
/// for the module, while the module is in use. This total size includes all
|
||||
/// tables from the Object Table down to and including the Per-Page Checksum Table.
|
||||
/// </remarks>
|
||||
public uint LoaderSectionSize { get; set; }
|
||||
public uint LoaderSectionSize;
|
||||
|
||||
/// <summary>
|
||||
/// Checksum for loader section.
|
||||
@@ -205,7 +214,7 @@
|
||||
/// If the checksum feature is not implemented, then the linker will set these fields
|
||||
/// to zero.
|
||||
/// </remarks>
|
||||
public uint LoaderSectionChecksum { get; set; }
|
||||
public uint LoaderSectionChecksum;
|
||||
|
||||
/// <summary>
|
||||
/// Object Table offset.
|
||||
@@ -213,7 +222,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ObjectTableOffset { get; set; }
|
||||
public uint ObjectTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Object Table Count.
|
||||
@@ -221,7 +230,7 @@
|
||||
/// <remarks>
|
||||
/// This defines the number of entries in Object Table.
|
||||
/// </remarks>
|
||||
public uint ObjectTableCount { get; set; }
|
||||
public uint ObjectTableCount;
|
||||
|
||||
/// <summary>
|
||||
/// Object Page Table offset
|
||||
@@ -229,7 +238,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ObjectPageMapOffset { get; set; }
|
||||
public uint ObjectPageMapOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Object Iterated Pages offset.
|
||||
@@ -237,7 +246,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ObjectIterateDataMapOffset { get; set; }
|
||||
public uint ObjectIterateDataMapOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Resource Table offset
|
||||
@@ -245,12 +254,12 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ResourceTableOffset { get; set; }
|
||||
public uint ResourceTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Number of entries in Resource Table.
|
||||
/// </summary>
|
||||
public uint ResourceTableCount { get; set; }
|
||||
public uint ResourceTableCount;
|
||||
|
||||
/// <summary>
|
||||
/// Resident Name Table offset.
|
||||
@@ -258,7 +267,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ResidentNamesTableOffset { get; set; }
|
||||
public uint ResidentNamesTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Entry Table offset.
|
||||
@@ -266,7 +275,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint EntryTableOffset { get; set; }
|
||||
public uint EntryTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Module Format Directives Table offset.
|
||||
@@ -274,7 +283,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ModuleDirectivesTableOffset { get; set; }
|
||||
public uint ModuleDirectivesTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Number of Module Format Directives in the Table.
|
||||
@@ -283,7 +292,7 @@
|
||||
/// This field specifies the number of entries in the
|
||||
/// Module Format Directives Table.
|
||||
/// </remarks>
|
||||
public uint ModuleDirectivesCount { get; set; }
|
||||
public uint ModuleDirectivesCount;
|
||||
|
||||
/// <summary>
|
||||
/// Fixup Page Table offset.
|
||||
@@ -291,7 +300,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint FixupPageTableOffset { get; set; }
|
||||
public uint FixupPageTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Fixup Record Table offset.
|
||||
@@ -299,7 +308,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint FixupRecordTableOffset { get; set; }
|
||||
public uint FixupRecordTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Import Module Name Table offset.
|
||||
@@ -307,12 +316,12 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ImportedModulesNameTableOffset { get; set; }
|
||||
public uint ImportedModulesNameTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// The number of entries in the Import Module Name Table.
|
||||
/// </summary>
|
||||
public uint ImportedModulesCount { get; set; }
|
||||
public uint ImportedModulesCount;
|
||||
|
||||
/// <summary>
|
||||
/// Import Procedure Name Table offset.
|
||||
@@ -320,7 +329,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint ImportProcedureNameTableOffset { get; set; }
|
||||
public uint ImportProcedureNameTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Per-page Checksum Table offset.
|
||||
@@ -328,7 +337,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint PerPageChecksumTableOffset { get; set; }
|
||||
public uint PerPageChecksumTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Data Pages Offset.
|
||||
@@ -336,7 +345,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the EXE file.
|
||||
/// </remarks>
|
||||
public uint DataPagesOffset { get; set; }
|
||||
public uint DataPagesOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Number of Preload pages for this module.
|
||||
@@ -345,7 +354,7 @@
|
||||
/// Note that OS/2 2.0 does not respect the preload of pages as specified
|
||||
/// in the executable file for performance reasons.
|
||||
/// </remarks>
|
||||
public uint PreloadPageCount { get; set; }
|
||||
public uint PreloadPageCount;
|
||||
|
||||
/// <summary>
|
||||
/// Non-Resident Name Table offset.
|
||||
@@ -353,12 +362,12 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the EXE file.
|
||||
/// </remarks>
|
||||
public uint NonResidentNamesTableOffset { get; set; }
|
||||
public uint NonResidentNamesTableOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Number of bytes in the Non-resident name table.
|
||||
/// </summary>
|
||||
public uint NonResidentNamesTableLength { get; set; }
|
||||
public uint NonResidentNamesTableLength;
|
||||
|
||||
/// <summary>
|
||||
/// Non-Resident Name Table Checksum.
|
||||
@@ -366,7 +375,7 @@
|
||||
/// <remarks>
|
||||
/// This is a cryptographic checksum of the Non-Resident Name Table.
|
||||
/// </remarks>
|
||||
public uint NonResidentNamesTableChecksum { get; set; }
|
||||
public uint NonResidentNamesTableChecksum;
|
||||
|
||||
/// <summary>
|
||||
/// The Auto Data Segment Object number.
|
||||
@@ -376,7 +385,7 @@
|
||||
/// This field is supported for 16-bit compatibility only and is not used by
|
||||
/// 32-bit modules.
|
||||
/// </remarks>
|
||||
public uint AutomaticDataObject { get; set; }
|
||||
public uint AutomaticDataObject;
|
||||
|
||||
/// <summary>
|
||||
/// Debug Information offset.
|
||||
@@ -384,7 +393,7 @@
|
||||
/// <remarks>
|
||||
/// This offset is relative to the beginning of the linear EXE header.
|
||||
/// </remarks>
|
||||
public uint DebugInformationOffset { get; set; }
|
||||
public uint DebugInformationOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Debug Information length.
|
||||
@@ -392,7 +401,7 @@
|
||||
/// <remarks>
|
||||
/// The length of the debug information in bytes.
|
||||
/// </remarks>
|
||||
public uint DebugInformationLength { get; set; }
|
||||
public uint DebugInformationLength;
|
||||
|
||||
/// <summary>
|
||||
/// Instance pages in preload section.
|
||||
@@ -400,7 +409,7 @@
|
||||
/// <remarks>
|
||||
/// The number of instance data pages found in the preload section.
|
||||
/// </remarks>
|
||||
public uint PreloadInstancePagesNumber { get; set; }
|
||||
public uint PreloadInstancePagesNumber;
|
||||
|
||||
/// <summary>
|
||||
/// Instance pages in demand section.
|
||||
@@ -408,7 +417,7 @@
|
||||
/// <remarks>
|
||||
/// The number of instance data pages found in the demand section.
|
||||
/// </remarks>
|
||||
public uint DemandInstancePagesNumber { get; set; }
|
||||
public uint DemandInstancePagesNumber;
|
||||
|
||||
/// <summary>
|
||||
/// Heap size added to the Auto DS Object.
|
||||
@@ -418,6 +427,6 @@
|
||||
/// by the loader. This field is supported for 16-bit compatibility only and
|
||||
/// is not used by 32-bit modules.
|
||||
/// </remarks>
|
||||
public uint ExtraHeapAllocation { get; set; }
|
||||
public uint ExtraHeapAllocation;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The Module Format Directives Table is an optional table that allows additional
|
||||
@@ -13,6 +15,7 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class ModuleFormatDirectivesTableEntry
|
||||
{
|
||||
/// <summary>
|
||||
@@ -22,7 +25,8 @@
|
||||
/// The directive number specifies the type of directive defined. This can be
|
||||
/// used to determine the format of the information in the directive data.
|
||||
/// </remarks>
|
||||
public DirectiveNumber DirectiveNumber { get; set; }
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
public DirectiveNumber DirectiveNumber;
|
||||
|
||||
/// <summary>
|
||||
/// Directive data length.
|
||||
@@ -30,7 +34,7 @@
|
||||
/// <remarks>
|
||||
/// This specifies the length in byte of the directive data for this directive number.
|
||||
/// </remarks>
|
||||
public ushort DirectiveDataLength { get; set; }
|
||||
public ushort DirectiveDataLength;
|
||||
|
||||
/// <summary>
|
||||
/// Directive data offset.
|
||||
@@ -40,6 +44,6 @@
|
||||
/// to beginning of linear EXE header for a resident table, and relative to the
|
||||
/// beginning of the EXE file for non-resident tables.
|
||||
/// </remarks>
|
||||
public uint DirectiveDataOffset { get; set; }
|
||||
public uint DirectiveDataOffset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The Object page table provides information about a logical page in an object.
|
||||
@@ -13,6 +15,7 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class ObjectPageMapEntry
|
||||
{
|
||||
/// <summary>
|
||||
@@ -35,7 +38,7 @@
|
||||
/// The logical page number (Object Page Table index), is used to index the Fixup
|
||||
/// Page Table to find any fixups associated with the logical page.
|
||||
/// </remarks>
|
||||
public uint PageDataOffset { get; set; }
|
||||
public uint PageDataOffset;
|
||||
|
||||
/// <summary>
|
||||
/// Number of bytes of data for this page.
|
||||
@@ -47,11 +50,12 @@
|
||||
/// bytes are to be filled with zeros. If the FLAGS field indicates an Iterated Data
|
||||
/// Page, the iterated data records will completely fill out the remainder.
|
||||
/// </remarks>
|
||||
public ushort DataSize { get; set; }
|
||||
public ushort DataSize;
|
||||
|
||||
/// <summary>
|
||||
/// Attributes specifying characteristics of this logical page.
|
||||
/// </summary>
|
||||
public ObjectPageFlags Flags { get; set; }
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
public ObjectPageFlags Flags;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The object table contains information that describes each segment in
|
||||
@@ -12,6 +14,7 @@
|
||||
/// </remarks>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class ObjectTableEntry
|
||||
{
|
||||
/// <summary>
|
||||
@@ -24,7 +27,7 @@
|
||||
/// file for the object. This memory size must also be large enough to
|
||||
/// contain all of the iterated data and uninitialized data in the EXE file.
|
||||
/// </remarks>
|
||||
public uint VirtualSegmentSize { get; set; }
|
||||
public uint VirtualSegmentSize;
|
||||
|
||||
/// <summary>
|
||||
/// Relocation Base Address.
|
||||
@@ -34,12 +37,13 @@
|
||||
/// internal relocation fixups for the module have been removed, this is the
|
||||
/// address the object will be allocated at by the loader.
|
||||
/// </remarks>
|
||||
public uint RelocationBaseAddress { get; set; }
|
||||
public uint RelocationBaseAddress;
|
||||
|
||||
/// <summary>
|
||||
/// Flag bits for the object.
|
||||
/// </summary>
|
||||
public ObjectFlags ObjectFlags { get; set; }
|
||||
[MarshalAs(UnmanagedType.U2)]
|
||||
public ObjectFlags ObjectFlags;
|
||||
|
||||
/// <summary>
|
||||
/// Object Page Table Index.
|
||||
@@ -53,7 +57,7 @@
|
||||
/// other words the object table entries are sorted based on the object page table
|
||||
/// index value.
|
||||
/// </remarks>
|
||||
public uint PageTableIndex { get; set; }
|
||||
public uint PageTableIndex;
|
||||
|
||||
/// <summary>
|
||||
/// # of object page table entries for this object.
|
||||
@@ -69,11 +73,11 @@
|
||||
/// was neither a zero filled or invalid page, then the additional pages are treated
|
||||
/// as zero filled pages.
|
||||
/// </remarks>
|
||||
public uint PageTableEntries { get; set; }
|
||||
public uint PageTableEntries;
|
||||
|
||||
/// <summary>
|
||||
/// Reserved for future use. Must be set to zero.
|
||||
/// </summary>
|
||||
public uint Reserved { get; set; }
|
||||
public uint Reserved;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The Per-Page Checksum table provides space for a cryptographic checksum for
|
||||
@@ -11,11 +13,12 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class PerPageChecksumTableEntry
|
||||
{
|
||||
/// <summary>
|
||||
/// Cryptographic checksum.
|
||||
/// </summary>
|
||||
public uint Checksum { get; set; }
|
||||
public uint Checksum;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The resource table is an array of resource table entries. Each resource table
|
||||
@@ -13,31 +15,33 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class ResourceTableEntry
|
||||
{
|
||||
/// <summary>
|
||||
/// Resource type ID.
|
||||
/// </summary>
|
||||
public ResourceTableEntryType TypeID { get; set; }
|
||||
[MarshalAs(UnmanagedType.U4)]
|
||||
public ResourceTableEntryType TypeID;
|
||||
|
||||
/// <summary>
|
||||
/// An ID used as a name for the resource when referred to.
|
||||
/// </summary>
|
||||
public ushort NameID { get; set; }
|
||||
public ushort NameID;
|
||||
|
||||
/// <summary>
|
||||
/// The number of bytes the resource consists of.
|
||||
/// </summary>
|
||||
public uint ResourceSize { get; set; }
|
||||
public uint ResourceSize;
|
||||
|
||||
/// <summary>
|
||||
/// The number of the object which contains the resource.
|
||||
/// </summary>
|
||||
public ushort ObjectNumber { get; set; }
|
||||
public ushort ObjectNumber;
|
||||
|
||||
/// <summary>
|
||||
/// The offset within the specified object where the resource begins.
|
||||
/// </summary>
|
||||
public uint Offset { get; set; }
|
||||
public uint Offset;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace SabreTools.Models.LinearExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// The Verify Record Directive Table is an optional table. It maintains a record
|
||||
@@ -9,6 +11,7 @@
|
||||
/// </summary>
|
||||
/// <see href="https://faydoc.tripod.com/formats/exe-LE.htm"/>
|
||||
/// <see href="http://www.edm2.com/index.php/LX_-_Linear_eXecutable_Module_Format_Description"/>
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public sealed class VerifyRecordDirectiveTableEntry
|
||||
{
|
||||
/// <summary>
|
||||
@@ -19,7 +22,7 @@
|
||||
/// directive table. This is equal to the number of modules referenced by
|
||||
/// this module.
|
||||
/// </remarks>
|
||||
public ushort EntryCount { get; set; }
|
||||
public ushort EntryCount;
|
||||
|
||||
/// <summary>
|
||||
/// Ordinal index into the Import Module Name Table.
|
||||
@@ -28,7 +31,7 @@
|
||||
/// This value is an ordered index in to the Import Module Name Table for
|
||||
/// the referenced module.
|
||||
/// </remarks>
|
||||
public ushort OrdinalIndex { get; set; }
|
||||
public ushort OrdinalIndex;
|
||||
|
||||
/// <summary>
|
||||
/// Module Version.
|
||||
@@ -41,7 +44,7 @@
|
||||
/// number in a module to be incremented anytime the entry point offsets
|
||||
/// change.
|
||||
/// </remarks>
|
||||
public ushort Version { get; set; }
|
||||
public ushort Version;
|
||||
|
||||
/// <summary>
|
||||
/// Module # of Object Entries.
|
||||
@@ -50,7 +53,7 @@
|
||||
/// This field is used to identify the number of object verify entries
|
||||
/// that follow for the referenced module.
|
||||
/// </remarks>
|
||||
public ushort ObjectEntriesCount { get; set; }
|
||||
public ushort ObjectEntriesCount;
|
||||
|
||||
/// <summary>
|
||||
/// Object # in Module.
|
||||
@@ -59,7 +62,7 @@
|
||||
/// This field specifies the object number in the referenced module that
|
||||
/// is being verified.
|
||||
/// </remarks>
|
||||
public ushort ObjectNumberInModule { get; set; }
|
||||
public ushort ObjectNumberInModule;
|
||||
|
||||
/// <summary>
|
||||
/// Object load base address.
|
||||
@@ -68,7 +71,7 @@
|
||||
/// This is the address that the object was loaded at when the fixups were
|
||||
/// performed.
|
||||
/// </remarks>
|
||||
public ushort ObjectLoadBaseAddress { get; set; }
|
||||
public ushort ObjectLoadBaseAddress;
|
||||
|
||||
/// <summary>
|
||||
/// Object virtual address size.
|
||||
@@ -77,6 +80,6 @@
|
||||
/// This field specifies the total amount of virtual memory required for
|
||||
/// this object.
|
||||
/// </remarks>
|
||||
public ushort ObjectVirtualAddressSize { get; set; }
|
||||
public ushort ObjectVirtualAddressSize;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user