using System.Collections.Generic;
using System.IO;
namespace BurnOutSharp.Wrappers
{
public class NewExecutable
{
#region Pass-Through Properties
#region MS-DOS Stub
#region Standard Fields
///
public byte[] Stub_Magic => _executable.Stub.Header.Magic;
///
public ushort Stub_LastPageBytes => _executable.Stub.Header.LastPageBytes;
///
public ushort Stub_Pages => _executable.Stub.Header.Pages;
///
public ushort Stub_RelocationItems => _executable.Stub.Header.RelocationItems;
///
public ushort Stub_HeaderParagraphSize => _executable.Stub.Header.HeaderParagraphSize;
///
public ushort Stub_MinimumExtraParagraphs => _executable.Stub.Header.MinimumExtraParagraphs;
///
public ushort Stub_MaximumExtraParagraphs => _executable.Stub.Header.MaximumExtraParagraphs;
///
public ushort Stub_InitialSSValue => _executable.Stub.Header.InitialSSValue;
///
public ushort Stub_Stub_InitialSPValue => _executable.Stub.Header.InitialSPValue;
///
public ushort Stub_Checksum => _executable.Stub.Header.Checksum;
///
public ushort Stub_InitialIPValue => _executable.Stub.Header.InitialIPValue;
///
public ushort Stub_InitialCSValue => _executable.Stub.Header.InitialCSValue;
///
public ushort Stub_RelocationTableAddr => _executable.Stub.Header.RelocationTableAddr;
///
public ushort Stub_OverlayNumber => _executable.Stub.Header.OverlayNumber;
#endregion
#region PE Extensions
///
public ushort[] Stub_Reserved1 => _executable.Stub.Header.Reserved1;
///
public ushort Stub_OEMIdentifier => _executable.Stub.Header.OEMIdentifier;
///
public ushort Stub_OEMInformation => _executable.Stub.Header.OEMInformation;
///
public ushort[] Stub_Reserved2 => _executable.Stub.Header.Reserved2;
///
public uint Stub_NewExeHeaderAddr => _executable.Stub.Header.NewExeHeaderAddr;
#endregion
#endregion
#region Header
///
public byte[] Magic => _executable.Header.Magic;
///
public byte LinkerVersion => _executable.Header.LinkerVersion;
///
public byte LinkerRevision => _executable.Header.LinkerRevision;
///
public ushort EntryTableOffset => _executable.Header.EntryTableOffset;
///
public ushort EntryTableSize => _executable.Header.EntryTableSize;
///
public uint CrcChecksum => _executable.Header.CrcChecksum;
///
public Models.NewExecutable.HeaderFlag FlagWord => _executable.Header.FlagWord;
///
public ushort AutomaticDataSegmentNumber => _executable.Header.AutomaticDataSegmentNumber;
///
public ushort InitialHeapAlloc => _executable.Header.InitialHeapAlloc;
///
public ushort InitialStackAlloc => _executable.Header.InitialStackAlloc;
///
public uint InitialCSIPSetting => _executable.Header.InitialCSIPSetting;
///
public uint InitialSSSPSetting => _executable.Header.InitialSSSPSetting;
///
public ushort FileSegmentCount => _executable.Header.FileSegmentCount;
///
public ushort ModuleReferenceTableSize => _executable.Header.ModuleReferenceTableSize;
///
public ushort NonResidentNameTableSize => _executable.Header.NonResidentNameTableSize;
///
public ushort SegmentTableOffset => _executable.Header.SegmentTableOffset;
///
public ushort ResourceTableOffset => _executable.Header.ResourceTableOffset;
///
public ushort ResidentNameTableOffset => _executable.Header.ResidentNameTableOffset;
///
public ushort ModuleReferenceTableOffset => _executable.Header.ModuleReferenceTableOffset;
///
public ushort ImportedNamesTableOffset => _executable.Header.ImportedNamesTableOffset;
///
public uint NonResidentNamesTableOffset => _executable.Header.NonResidentNamesTableOffset;
///
public ushort MovableEntriesCount => _executable.Header.MovableEntriesCount;
///
public ushort SegmentAlignmentShiftCount => _executable.Header.SegmentAlignmentShiftCount;
///
public ushort ResourceEntriesCount => _executable.Header.ResourceEntriesCount;
///
public Models.NewExecutable.OperatingSystem TargetOperatingSystem => _executable.Header.TargetOperatingSystem;
///
public Models.NewExecutable.OS2Flag AdditionalFlags => _executable.Header.AdditionalFlags;
///
public ushort ReturnThunkOffset => _executable.Header.ReturnThunkOffset;
///
public ushort SegmentReferenceThunkOffset => _executable.Header.SegmentReferenceThunkOffset;
///
public ushort MinCodeSwapAreaSize => _executable.Header.MinCodeSwapAreaSize;
///
public byte WindowsSDKRevision => _executable.Header.WindowsSDKRevision;
///
public byte WindowsSDKVersion => _executable.Header.WindowsSDKVersion;
#endregion
#region Tables
///
public Models.NewExecutable.SegmentTableEntry[] SegmentTable => _executable.SegmentTable;
///
public Models.NewExecutable.ResourceTable ResourceTable => _executable.ResourceTable;
///
public Models.NewExecutable.ResidentNameTableEntry[] ResidentNameTable => _executable.ResidentNameTable;
///
public Models.NewExecutable.ModuleReferenceTableEntry[] ModuleReferenceTable => _executable.ModuleReferenceTable;
///
public Dictionary ImportedNameTable => _executable.ImportedNameTable;
///
public Models.NewExecutable.EntryTableBundle[] EntryTable => _executable.EntryTable;
///
public Models.NewExecutable.NonResidentNameTableEntry[] NonResidentNameTable => _executable.NonResidentNameTable;
#endregion
#endregion
#region Extension Properties
// TODO: Determine what extension properties are needed
#endregion
#region Instance Variables
///
/// Internal representation of the executable
///
private Models.NewExecutable.Executable _executable;
#endregion
///
/// Private constructor
///
private NewExecutable() { }
///
/// Create an NE executable from a byte array and offset
///
/// Byte array representing the executable
/// Offset within the array to parse
/// An NE executable wrapper on success, null on failure
public static NewExecutable Create(byte[] data, int offset)
{
var executable = Builder.NewExecutable.ParseExecutable(data, offset);
if (executable == null)
return null;
var wrapper = new NewExecutable { _executable = executable };
return wrapper;
}
///
/// Create an NE executable from a Stream
///
/// Stream representing the executable
/// An NE executable wrapper on success, null on failure
public static NewExecutable Create(Stream data)
{
var executable = Builder.NewExecutable.ParseExecutable(data);
if (executable == null)
return null;
var wrapper = new NewExecutable { _executable = executable };
return wrapper;
}
}
}