Make wrappers more type-defined

This commit is contained in:
Matt Nadareski
2023-09-11 23:25:09 -04:00
parent 30e8e79cf7
commit 2f9280460e
29 changed files with 1778 additions and 1457 deletions

View File

@@ -6,12 +6,12 @@ using static SabreTools.Serialization.Extensions;
namespace BinaryObjectScanner.Wrappers
{
public class NewExecutable : WrapperBase
public class NewExecutable : WrapperBase<SabreTools.Models.NewExecutable.Executable>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "New Executable (NE)";
public override string DescriptionString => "New Executable (NE)";
#endregion
@@ -22,65 +22,65 @@ namespace BinaryObjectScanner.Wrappers
#region Standard Fields
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Magic"/>
public string Stub_Magic => _executable.Stub.Header.Magic;
public string Stub_Magic => _model.Stub.Header.Magic;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.LastPageBytes"/>
public ushort Stub_LastPageBytes => _executable.Stub.Header.LastPageBytes;
public ushort Stub_LastPageBytes => _model.Stub.Header.LastPageBytes;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Pages"/>
public ushort Stub_Pages => _executable.Stub.Header.Pages;
public ushort Stub_Pages => _model.Stub.Header.Pages;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.RelocationItems"/>
public ushort Stub_RelocationItems => _executable.Stub.Header.RelocationItems;
public ushort Stub_RelocationItems => _model.Stub.Header.RelocationItems;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.HeaderParagraphSize"/>
public ushort Stub_HeaderParagraphSize => _executable.Stub.Header.HeaderParagraphSize;
public ushort Stub_HeaderParagraphSize => _model.Stub.Header.HeaderParagraphSize;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.MinimumExtraParagraphs"/>
public ushort Stub_MinimumExtraParagraphs => _executable.Stub.Header.MinimumExtraParagraphs;
public ushort Stub_MinimumExtraParagraphs => _model.Stub.Header.MinimumExtraParagraphs;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.MaximumExtraParagraphs"/>
public ushort Stub_MaximumExtraParagraphs => _executable.Stub.Header.MaximumExtraParagraphs;
public ushort Stub_MaximumExtraParagraphs => _model.Stub.Header.MaximumExtraParagraphs;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialSSValue"/>
public ushort Stub_InitialSSValue => _executable.Stub.Header.InitialSSValue;
public ushort Stub_InitialSSValue => _model.Stub.Header.InitialSSValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialSPValue"/>
public ushort Stub_InitialSPValue => _executable.Stub.Header.InitialSPValue;
public ushort Stub_InitialSPValue => _model.Stub.Header.InitialSPValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Checksum"/>
public ushort Stub_Checksum => _executable.Stub.Header.Checksum;
public ushort Stub_Checksum => _model.Stub.Header.Checksum;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialIPValue"/>
public ushort Stub_InitialIPValue => _executable.Stub.Header.InitialIPValue;
public ushort Stub_InitialIPValue => _model.Stub.Header.InitialIPValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialCSValue"/>
public ushort Stub_InitialCSValue => _executable.Stub.Header.InitialCSValue;
public ushort Stub_InitialCSValue => _model.Stub.Header.InitialCSValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.RelocationTableAddr"/>
public ushort Stub_RelocationTableAddr => _executable.Stub.Header.RelocationTableAddr;
public ushort Stub_RelocationTableAddr => _model.Stub.Header.RelocationTableAddr;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.OverlayNumber"/>
public ushort Stub_OverlayNumber => _executable.Stub.Header.OverlayNumber;
public ushort Stub_OverlayNumber => _model.Stub.Header.OverlayNumber;
#endregion
#region PE Extensions
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Reserved1"/>
public ushort[] Stub_Reserved1 => _executable.Stub.Header.Reserved1;
public ushort[] Stub_Reserved1 => _model.Stub.Header.Reserved1;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.OEMIdentifier"/>
public ushort Stub_OEMIdentifier => _executable.Stub.Header.OEMIdentifier;
public ushort Stub_OEMIdentifier => _model.Stub.Header.OEMIdentifier;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.OEMInformation"/>
public ushort Stub_OEMInformation => _executable.Stub.Header.OEMInformation;
public ushort Stub_OEMInformation => _model.Stub.Header.OEMInformation;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Reserved2"/>
public ushort[] Stub_Reserved2 => _executable.Stub.Header.Reserved2;
public ushort[] Stub_Reserved2 => _model.Stub.Header.Reserved2;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.NewExeHeaderAddr"/>
public uint Stub_NewExeHeaderAddr => _executable.Stub.Header.NewExeHeaderAddr;
public uint Stub_NewExeHeaderAddr => _model.Stub.Header.NewExeHeaderAddr;
#endregion
@@ -89,122 +89,122 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.Magic"/>
public string Magic => _executable.Header.Magic;
public string Magic => _model.Header.Magic;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.LinkerVersion"/>
public byte LinkerVersion => _executable.Header.LinkerVersion;
public byte LinkerVersion => _model.Header.LinkerVersion;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.LinkerRevision"/>
public byte LinkerRevision => _executable.Header.LinkerRevision;
public byte LinkerRevision => _model.Header.LinkerRevision;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.EntryTableOffset"/>
public ushort EntryTableOffset => _executable.Header.EntryTableOffset;
public ushort EntryTableOffset => _model.Header.EntryTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.EntryTableSize"/>
public ushort EntryTableSize => _executable.Header.EntryTableSize;
public ushort EntryTableSize => _model.Header.EntryTableSize;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.CrcChecksum"/>
public uint CrcChecksum => _executable.Header.CrcChecksum;
public uint CrcChecksum => _model.Header.CrcChecksum;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.FlagWord"/>
public SabreTools.Models.NewExecutable.HeaderFlag FlagWord => _executable.Header.FlagWord;
public SabreTools.Models.NewExecutable.HeaderFlag FlagWord => _model.Header.FlagWord;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.AutomaticDataSegmentNumber"/>
public ushort AutomaticDataSegmentNumber => _executable.Header.AutomaticDataSegmentNumber;
public ushort AutomaticDataSegmentNumber => _model.Header.AutomaticDataSegmentNumber;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.InitialHeapAlloc"/>
public ushort InitialHeapAlloc => _executable.Header.InitialHeapAlloc;
public ushort InitialHeapAlloc => _model.Header.InitialHeapAlloc;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.InitialStackAlloc"/>
public ushort InitialStackAlloc => _executable.Header.InitialStackAlloc;
public ushort InitialStackAlloc => _model.Header.InitialStackAlloc;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.InitialCSIPSetting"/>
public uint InitialCSIPSetting => _executable.Header.InitialCSIPSetting;
public uint InitialCSIPSetting => _model.Header.InitialCSIPSetting;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.InitialSSSPSetting"/>
public uint InitialSSSPSetting => _executable.Header.InitialSSSPSetting;
public uint InitialSSSPSetting => _model.Header.InitialSSSPSetting;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.FileSegmentCount"/>
public ushort FileSegmentCount => _executable.Header.FileSegmentCount;
public ushort FileSegmentCount => _model.Header.FileSegmentCount;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ModuleReferenceTableSize"/>
public ushort ModuleReferenceTableSize => _executable.Header.ModuleReferenceTableSize;
public ushort ModuleReferenceTableSize => _model.Header.ModuleReferenceTableSize;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.NonResidentNameTableSize"/>
public ushort NonResidentNameTableSize => _executable.Header.NonResidentNameTableSize;
public ushort NonResidentNameTableSize => _model.Header.NonResidentNameTableSize;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.SegmentTableOffset"/>
public ushort SegmentTableOffset => _executable.Header.SegmentTableOffset;
public ushort SegmentTableOffset => _model.Header.SegmentTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ResourceTableOffset"/>
public ushort ResourceTableOffset => _executable.Header.ResourceTableOffset;
public ushort ResourceTableOffset => _model.Header.ResourceTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ResidentNameTableOffset"/>
public ushort ResidentNameTableOffset => _executable.Header.ResidentNameTableOffset;
public ushort ResidentNameTableOffset => _model.Header.ResidentNameTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ModuleReferenceTableOffset"/>
public ushort ModuleReferenceTableOffset => _executable.Header.ModuleReferenceTableOffset;
public ushort ModuleReferenceTableOffset => _model.Header.ModuleReferenceTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ImportedNamesTableOffset"/>
public ushort ImportedNamesTableOffset => _executable.Header.ImportedNamesTableOffset;
public ushort ImportedNamesTableOffset => _model.Header.ImportedNamesTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.NonResidentNamesTableOffset"/>
public uint NonResidentNamesTableOffset => _executable.Header.NonResidentNamesTableOffset;
public uint NonResidentNamesTableOffset => _model.Header.NonResidentNamesTableOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.MovableEntriesCount"/>
public ushort MovableEntriesCount => _executable.Header.MovableEntriesCount;
public ushort MovableEntriesCount => _model.Header.MovableEntriesCount;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.SegmentAlignmentShiftCount"/>
public ushort SegmentAlignmentShiftCount => _executable.Header.SegmentAlignmentShiftCount;
public ushort SegmentAlignmentShiftCount => _model.Header.SegmentAlignmentShiftCount;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ResourceEntriesCount"/>
public ushort ResourceEntriesCount => _executable.Header.ResourceEntriesCount;
public ushort ResourceEntriesCount => _model.Header.ResourceEntriesCount;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.TargetOperatingSystem"/>
public SabreTools.Models.NewExecutable.OperatingSystem TargetOperatingSystem => _executable.Header.TargetOperatingSystem;
public SabreTools.Models.NewExecutable.OperatingSystem TargetOperatingSystem => _model.Header.TargetOperatingSystem;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.AdditionalFlags"/>
public SabreTools.Models.NewExecutable.OS2Flag AdditionalFlags => _executable.Header.AdditionalFlags;
public SabreTools.Models.NewExecutable.OS2Flag AdditionalFlags => _model.Header.AdditionalFlags;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.ReturnThunkOffset"/>
public ushort ReturnThunkOffset => _executable.Header.ReturnThunkOffset;
public ushort ReturnThunkOffset => _model.Header.ReturnThunkOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.SegmentReferenceThunkOffset"/>
public ushort SegmentReferenceThunkOffset => _executable.Header.SegmentReferenceThunkOffset;
public ushort SegmentReferenceThunkOffset => _model.Header.SegmentReferenceThunkOffset;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.MinCodeSwapAreaSize"/>
public ushort MinCodeSwapAreaSize => _executable.Header.MinCodeSwapAreaSize;
public ushort MinCodeSwapAreaSize => _model.Header.MinCodeSwapAreaSize;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.WindowsSDKRevision"/>
public byte WindowsSDKRevision => _executable.Header.WindowsSDKRevision;
public byte WindowsSDKRevision => _model.Header.WindowsSDKRevision;
/// <inheritdoc cref="Models.NewExecutable.ExecutableHeader.WindowsSDKVersion"/>
public byte WindowsSDKVersion => _executable.Header.WindowsSDKVersion;
public byte WindowsSDKVersion => _model.Header.WindowsSDKVersion;
#endregion
#region Tables
/// <inheritdoc cref="Models.NewExecutable.SegmentTable"/>
public SabreTools.Models.NewExecutable.SegmentTableEntry[] SegmentTable => _executable.SegmentTable;
public SabreTools.Models.NewExecutable.SegmentTableEntry[] SegmentTable => _model.SegmentTable;
/// <inheritdoc cref="Models.NewExecutable.ResourceTable"/>
public SabreTools.Models.NewExecutable.ResourceTable ResourceTable => _executable.ResourceTable;
public SabreTools.Models.NewExecutable.ResourceTable ResourceTable => _model.ResourceTable;
/// <inheritdoc cref="Models.NewExecutable.ResidentNameTable"/>
public SabreTools.Models.NewExecutable.ResidentNameTableEntry[] ResidentNameTable => _executable.ResidentNameTable;
public SabreTools.Models.NewExecutable.ResidentNameTableEntry[] ResidentNameTable => _model.ResidentNameTable;
/// <inheritdoc cref="Models.NewExecutable.ModuleReferenceTable"/>
public SabreTools.Models.NewExecutable.ModuleReferenceTableEntry[] ModuleReferenceTable => _executable.ModuleReferenceTable;
public SabreTools.Models.NewExecutable.ModuleReferenceTableEntry[] ModuleReferenceTable => _model.ModuleReferenceTable;
/// <inheritdoc cref="Models.NewExecutable.ImportedNameTable"/>
public Dictionary<ushort, SabreTools.Models.NewExecutable.ImportedNameTableEntry> ImportedNameTable => _executable.ImportedNameTable;
public Dictionary<ushort, SabreTools.Models.NewExecutable.ImportedNameTableEntry> ImportedNameTable => _model.ImportedNameTable;
/// <inheritdoc cref="Models.NewExecutable.EntryTable"/>
public SabreTools.Models.NewExecutable.EntryTableBundle[] EntryTable => _executable.EntryTable;
public SabreTools.Models.NewExecutable.EntryTableBundle[] EntryTable => _model.EntryTable;
/// <inheritdoc cref="Models.NewExecutable.NonResidentNameTable"/>
public SabreTools.Models.NewExecutable.NonResidentNameTableEntry[] NonResidentNameTable => _executable.NonResidentNameTable;
public SabreTools.Models.NewExecutable.NonResidentNameTableEntry[] NonResidentNameTable => _model.NonResidentNameTable;
#endregion
@@ -216,21 +216,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the executable
/// </summary>
private SabreTools.Models.NewExecutable.Executable _executable;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private NewExecutable() { }
/// <inheritdoc/>
#if NET48
public NewExecutable(SabreTools.Models.NewExecutable.Executable model, byte[] data, int offset)
#else
public NewExecutable(SabreTools.Models.NewExecutable.Executable? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public NewExecutable(SabreTools.Models.NewExecutable.Executable model, Stream data)
#else
public NewExecutable(SabreTools.Models.NewExecutable.Executable? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an NE executable from a byte array and offset
@@ -268,13 +276,14 @@ namespace BinaryObjectScanner.Wrappers
if (executable == null)
return null;
var wrapper = new NewExecutable
try
{
_executable = executable,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new NewExecutable(executable, data);
}
catch
{
return null;
}
}
#endregion
@@ -622,7 +631,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_executable, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif