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

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class AACSMediaKeyBlock : WrapperBase
public class AACSMediaKeyBlock : WrapperBase<SabreTools.Models.AACS.MediaKeyBlock>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "AACS Media Key Block";
public override string DescriptionString => "AACS Media Key Block";
#endregion
@@ -18,27 +18,35 @@ namespace BinaryObjectScanner.Wrappers
#region Records
/// <inheritdoc cref="Models.AACS.MediaKeyBlock.Records"/>
public SabreTools.Models.AACS.Record[] Records => _mediaKeyBlock.Records;
public SabreTools.Models.AACS.Record[] Records => _model.Records;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the AACS media key block
/// </summary>
private SabreTools.Models.AACS.MediaKeyBlock _mediaKeyBlock;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private AACSMediaKeyBlock() { }
/// <inheritdoc/>
#if NET48
public AACSMediaKeyBlock(SabreTools.Models.AACS.MediaKeyBlock model, byte[] data, int offset)
#else
public AACSMediaKeyBlock(SabreTools.Models.AACS.MediaKeyBlock? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public AACSMediaKeyBlock(SabreTools.Models.AACS.MediaKeyBlock model, Stream data)
#else
public AACSMediaKeyBlock(SabreTools.Models.AACS.MediaKeyBlock? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an AACS media key block from a byte array and offset
@@ -76,13 +84,14 @@ namespace BinaryObjectScanner.Wrappers
if (mediaKeyBlock == null)
return null;
var wrapper = new AACSMediaKeyBlock
try
{
_mediaKeyBlock = mediaKeyBlock,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new AACSMediaKeyBlock(mediaKeyBlock, data);
}
catch
{
return null;
}
}
#endregion
@@ -284,7 +293,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_mediaKeyBlock, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -4,58 +4,66 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class BDPlusSVM : WrapperBase
public class BDPlusSVM : WrapperBase<SabreTools.Models.BDPlus.SVM>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "BD+ SVM";
public override string DescriptionString => "BD+ SVM";
#endregion
#region Pass-Through Properties
/// <inheritdoc cref="Models.BDPlus.SVM.Signature"/>
public string Signature => _svm.Signature;
public string Signature => _model.Signature;
/// <inheritdoc cref="Models.BDPlus.SVM.Unknown1"/>
public byte[] Unknown1 => _svm.Unknown1;
public byte[] Unknown1 => _model.Unknown1;
/// <inheritdoc cref="Models.BDPlus.SVM.Year"/>
public ushort Year => _svm.Year;
public ushort Year => _model.Year;
/// <inheritdoc cref="Models.BDPlus.SVM.Month"/>
public byte Month => _svm.Month;
public byte Month => _model.Month;
/// <inheritdoc cref="Models.BDPlus.SVM.Day"/>
public byte Day => _svm.Day;
public byte Day => _model.Day;
/// <inheritdoc cref="Models.BDPlus.SVM.Unknown2"/>
public byte[] Unknown2 => _svm.Unknown2;
public byte[] Unknown2 => _model.Unknown2;
/// <inheritdoc cref="Models.BDPlus.SVM.Length"/>
public uint Length => _svm.Length;
public uint Length => _model.Length;
/// <inheritdoc cref="Models.BDPlus.SVM.Data"/>
public byte[] Data => _svm.Data;
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the SVM
/// </summary>
private SabreTools.Models.BDPlus.SVM _svm;
public byte[] Data => _model.Data;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private BDPlusSVM() { }
/// <inheritdoc/>
#if NET48
public BDPlusSVM(SabreTools.Models.BDPlus.SVM model, byte[] data, int offset)
#else
public BDPlusSVM(SabreTools.Models.BDPlus.SVM? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public BDPlusSVM(SabreTools.Models.BDPlus.SVM model, Stream data)
#else
public BDPlusSVM(SabreTools.Models.BDPlus.SVM? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a BD+ SVM from a byte array and offset
@@ -93,13 +101,14 @@ namespace BinaryObjectScanner.Wrappers
if (svm == null)
return null;
var wrapper = new BDPlusSVM
try
{
_svm = svm,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new BDPlusSVM(svm, data);
}
catch
{
return null;
}
}
#endregion
@@ -142,7 +151,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_svm, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -5,12 +5,12 @@ using SharpCompress.Compressors.Deflate;
namespace BinaryObjectScanner.Wrappers
{
public class BFPK : WrapperBase
public class BFPK : WrapperBase<SabreTools.Models.BFPK.Archive>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "BFPK Archive";
public override string DescriptionString => "BFPK Archive";
#endregion
@@ -19,40 +19,48 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.BFPK.Header.Magic"/>
public string Magic => _archive.Header.Magic;
public string Magic => _model.Header.Magic;
/// <inheritdoc cref="Models.BFPK.Header.Version"/>
public int Version => _archive.Header.Version;
public int Version => _model.Header.Version;
/// <inheritdoc cref="Models.BFPK.Header.Files"/>
public int Files => _archive.Header.Files;
public int Files => _model.Header.Files;
#endregion
#region Files
/// <inheritdoc cref="Models.BFPK.Archive.Files"/>
public SabreTools.Models.BFPK.FileEntry[] FileTable => _archive.Files;
public SabreTools.Models.BFPK.FileEntry[] FileTable => _model.Files;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the archive
/// </summary>
private SabreTools.Models.BFPK.Archive _archive;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private BFPK() { }
/// <inheritdoc/>
#if NET48
public BFPK(SabreTools.Models.BFPK.Archive model, byte[] data, int offset)
#else
public BFPK(SabreTools.Models.BFPK.Archive? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public BFPK(SabreTools.Models.BFPK.Archive model, Stream data)
#else
public BFPK(SabreTools.Models.BFPK.Archive? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a BFPK archive from a byte array and offset
@@ -90,13 +98,14 @@ namespace BinaryObjectScanner.Wrappers
if (archive == null)
return null;
var wrapper = new BFPK
try
{
_archive = archive,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new BFPK(archive, data);
}
catch
{
return null;
}
}
#endregion
@@ -251,7 +260,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_archive, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -6,12 +6,12 @@ using static SabreTools.Models.BSP.Constants;
namespace BinaryObjectScanner.Wrappers
{
public class BSP : WrapperBase
public class BSP : WrapperBase<SabreTools.Models.BSP.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Half-Life Level (BSP)";
public override string DescriptionString => "Half-Life Level (BSP)";
#endregion
@@ -20,51 +20,59 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.BSP.Header.Version"/>
public uint Version => _file.Header.Version;
public uint Version => _model.Header.Version;
#endregion
#region Lumps
/// <inheritdoc cref="Models.BSP.File.Lumps"/>
public SabreTools.Models.BSP.Lump[] Lumps => _file.Lumps;
public SabreTools.Models.BSP.Lump[] Lumps => _model.Lumps;
#endregion
#region Texture Header
/// <inheritdoc cref="Models.BSP.TextureHeader.TextureCount"/>
public uint TextureCount => _file.TextureHeader.TextureCount;
public uint TextureCount => _model.TextureHeader.TextureCount;
/// <inheritdoc cref="Models.BSP.TextureHeader.Offsets"/>
public uint[] Offsets => _file.TextureHeader.Offsets;
public uint[] Offsets => _model.TextureHeader.Offsets;
#endregion
#region Textures
/// <inheritdoc cref="Models.BSP.File.Textures"/>
public SabreTools.Models.BSP.Texture[] Textures => _file.Textures;
public SabreTools.Models.BSP.Texture[] Textures => _model.Textures;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the BSP
/// </summary>
private SabreTools.Models.BSP.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private BSP() { }
/// <inheritdoc/>
#if NET48
public BSP(SabreTools.Models.BSP.File model, byte[] data, int offset)
#else
public BSP(SabreTools.Models.BSP.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public BSP(SabreTools.Models.BSP.File model, Stream data)
#else
public BSP(SabreTools.Models.BSP.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a BSP from a byte array and offset
@@ -102,13 +110,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new BSP
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new BSP(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -234,7 +243,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -5,12 +5,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class CFB : WrapperBase
public class CFB : WrapperBase<SabreTools.Models.CFB.Binary>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Compact File Binary";
public override string DescriptionString => "Compact File Binary";
#endregion
@@ -19,61 +19,61 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.CFB.FileHeader.Signature"/>
public ulong Signature => _binary.Header.Signature;
public ulong Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.CFB.FileHeader.CLSID"/>
public Guid CLSID => _binary.Header.CLSID;
public Guid CLSID => _model.Header.CLSID;
/// <inheritdoc cref="Models.CFB.FileHeader.MinorVersion"/>
public ushort MinorVersion => _binary.Header.MinorVersion;
public ushort MinorVersion => _model.Header.MinorVersion;
/// <inheritdoc cref="Models.CFB.FileHeader.MajorVersion"/>
public ushort MajorVersion => _binary.Header.MajorVersion;
public ushort MajorVersion => _model.Header.MajorVersion;
/// <inheritdoc cref="Models.CFB.FileHeader.ByteOrder"/>
public ushort ByteOrder => _binary.Header.ByteOrder;
public ushort ByteOrder => _model.Header.ByteOrder;
/// <inheritdoc cref="Models.CFB.FileHeader.SectorShift"/>
public ushort SectorShift => _binary.Header.SectorShift;
public ushort SectorShift => _model.Header.SectorShift;
/// <inheritdoc cref="Models.CFB.FileHeader.MiniSectorShift"/>
public ushort MiniSectorShift => _binary.Header.MiniSectorShift;
public ushort MiniSectorShift => _model.Header.MiniSectorShift;
/// <inheritdoc cref="Models.CFB.FileHeader.Reserved"/>
public byte[] Reserved => _binary.Header.Reserved;
public byte[] Reserved => _model.Header.Reserved;
/// <inheritdoc cref="Models.CFB.FileHeader.NumberOfDirectorySectors"/>
public uint NumberOfDirectorySectors => _binary.Header.NumberOfDirectorySectors;
public uint NumberOfDirectorySectors => _model.Header.NumberOfDirectorySectors;
/// <inheritdoc cref="Models.CFB.FileHeader.NumberOfFATSectors"/>
public uint NumberOfFATSectors => _binary.Header.NumberOfFATSectors;
public uint NumberOfFATSectors => _model.Header.NumberOfFATSectors;
/// <inheritdoc cref="Models.CFB.FileHeader.FirstDirectorySectorLocation"/>
public uint FirstDirectorySectorLocation => _binary.Header.FirstDirectorySectorLocation;
public uint FirstDirectorySectorLocation => _model.Header.FirstDirectorySectorLocation;
/// <inheritdoc cref="Models.CFB.FileHeader.TransactionSignatureNumber"/>
public uint TransactionSignatureNumber => _binary.Header.TransactionSignatureNumber;
public uint TransactionSignatureNumber => _model.Header.TransactionSignatureNumber;
/// <inheritdoc cref="Models.CFB.FileHeader.MiniStreamCutoffSize"/>
public uint MiniStreamCutoffSize => _binary.Header.MiniStreamCutoffSize;
public uint MiniStreamCutoffSize => _model.Header.MiniStreamCutoffSize;
/// <inheritdoc cref="Models.CFB.FileHeader.FirstMiniFATSectorLocation"/>
public uint FirstMiniFATSectorLocation => _binary.Header.FirstMiniFATSectorLocation;
public uint FirstMiniFATSectorLocation => _model.Header.FirstMiniFATSectorLocation;
/// <inheritdoc cref="Models.CFB.FileHeader.NumberOfMiniFATSectors"/>
public uint NumberOfMiniFATSectors => _binary.Header.NumberOfMiniFATSectors;
public uint NumberOfMiniFATSectors => _model.Header.NumberOfMiniFATSectors;
/// <inheritdoc cref="Models.CFB.FileHeader.FirstDIFATSectorLocation"/>
public uint FirstDIFATSectorLocation => _binary.Header.FirstDIFATSectorLocation;
public uint FirstDIFATSectorLocation => _model.Header.FirstDIFATSectorLocation;
/// <inheritdoc cref="Models.CFB.FileHeader.NumberOfDIFATSectors"/>
public uint NumberOfDIFATSectors => _binary.Header.NumberOfDIFATSectors;
public uint NumberOfDIFATSectors => _model.Header.NumberOfDIFATSectors;
/// <inheritdoc cref="Models.CFB.FileHeader.DIFAT"/>
#if NET48
public SabreTools.Models.CFB.SectorNumber[] DIFAT => _binary.Header.DIFAT;
public SabreTools.Models.CFB.SectorNumber[] DIFAT => _model.Header.DIFAT;
#else
public SabreTools.Models.CFB.SectorNumber?[] DIFAT => _binary.Header.DIFAT;
public SabreTools.Models.CFB.SectorNumber?[] DIFAT => _model.Header.DIFAT;
#endif
#endregion
@@ -82,9 +82,9 @@ namespace BinaryObjectScanner.Wrappers
/// <inheritdoc cref="Models.CFB.Binary.FATSectorNumbers"/>
#if NET48
public SabreTools.Models.CFB.SectorNumber[] FATSectorNumbers => _binary.FATSectorNumbers;
public SabreTools.Models.CFB.SectorNumber[] FATSectorNumbers => _model.FATSectorNumbers;
#else
public SabreTools.Models.CFB.SectorNumber?[] FATSectorNumbers => _binary.FATSectorNumbers;
public SabreTools.Models.CFB.SectorNumber?[] FATSectorNumbers => _model.FATSectorNumbers;
#endif
#endregion
@@ -93,9 +93,9 @@ namespace BinaryObjectScanner.Wrappers
/// <inheritdoc cref="Models.CFB.Binary.MiniFATSectorNumbers"/>
#if NET48
public SabreTools.Models.CFB.SectorNumber[] MiniFATSectorNumbers => _binary.MiniFATSectorNumbers;
public SabreTools.Models.CFB.SectorNumber[] MiniFATSectorNumbers => _model.MiniFATSectorNumbers;
#else
public SabreTools.Models.CFB.SectorNumber?[] MiniFATSectorNumbers => _binary.MiniFATSectorNumbers;
public SabreTools.Models.CFB.SectorNumber?[] MiniFATSectorNumbers => _model.MiniFATSectorNumbers;
#endif
#endregion
@@ -104,9 +104,9 @@ namespace BinaryObjectScanner.Wrappers
/// <inheritdoc cref="Models.CFB.Binary.DIFATSectorNumbers"/>
#if NET48
public SabreTools.Models.CFB.SectorNumber[] DIFATSectorNumbers => _binary.DIFATSectorNumbers;
public SabreTools.Models.CFB.SectorNumber[] DIFATSectorNumbers => _model.DIFATSectorNumbers;
#else
public SabreTools.Models.CFB.SectorNumber?[] DIFATSectorNumbers => _binary.DIFATSectorNumbers;
public SabreTools.Models.CFB.SectorNumber?[] DIFATSectorNumbers => _model.DIFATSectorNumbers;
#endif
#endregion
@@ -115,9 +115,9 @@ namespace BinaryObjectScanner.Wrappers
/// <inheritdoc cref="Models.CFB.Binary.DirectoryEntries"/>
#if NET48
public SabreTools.Models.CFB.DirectoryEntry[] DirectoryEntries => _binary.DirectoryEntries;
public SabreTools.Models.CFB.DirectoryEntry[] DirectoryEntries => _model.DirectoryEntries;
#else
public SabreTools.Models.CFB.DirectoryEntry?[] DirectoryEntries => _binary.DirectoryEntries;
public SabreTools.Models.CFB.DirectoryEntry?[] DirectoryEntries => _model.DirectoryEntries;
#endif
#endregion
@@ -138,21 +138,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the file
/// </summary>
private SabreTools.Models.CFB.Binary _binary;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private CFB() { }
/// <inheritdoc/>
#if NET48
public CFB(SabreTools.Models.CFB.Binary model, byte[] data, int offset)
#else
public CFB(SabreTools.Models.CFB.Binary? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public CFB(SabreTools.Models.CFB.Binary model, Stream data)
#else
public CFB(SabreTools.Models.CFB.Binary? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a Compound File Binary from a byte array and offset
@@ -190,13 +198,14 @@ namespace BinaryObjectScanner.Wrappers
if (binary == null)
return null;
var wrapper = new CFB
try
{
_binary = binary,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new CFB(binary, data);
}
catch
{
return null;
}
}
#endregion
@@ -551,7 +560,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_binary, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class CIA : WrapperBase
public class CIA : WrapperBase<SabreTools.Models.N3DS.CIA>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "CTR Importable Archive (CIA)";
public override string DescriptionString => "CTR Importable Archive (CIA)";
#endregion
@@ -18,263 +18,271 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.N3DS.CIAHeader.HeaderSize"/>
public uint HeaderSize => _cia.Header.HeaderSize;
public uint HeaderSize => _model.Header.HeaderSize;
/// <inheritdoc cref="Models.N3DS.CIAHeader.Type"/>
public ushort Type => _cia.Header.Type;
public ushort Type => _model.Header.Type;
/// <inheritdoc cref="Models.N3DS.CIAHeader.Version"/>
public ushort Version => _cia.Header.Version;
public ushort Version => _model.Header.Version;
/// <inheritdoc cref="Models.N3DS.CIAHeader.CertificateChainSize"/>
public uint CertificateChainSize => _cia.Header.CertificateChainSize;
public uint CertificateChainSize => _model.Header.CertificateChainSize;
/// <inheritdoc cref="Models.N3DS.CIAHeader.TicketSize"/>
public uint TicketSize => _cia.Header.TicketSize;
public uint TicketSize => _model.Header.TicketSize;
/// <inheritdoc cref="Models.N3DS.CIAHeader.TMDFileSize"/>
public uint TMDFileSize => _cia.Header.TMDFileSize;
public uint TMDFileSize => _model.Header.TMDFileSize;
/// <inheritdoc cref="Models.N3DS.CIAHeader.MetaSize"/>
public uint MetaSize => _cia.Header.MetaSize;
public uint MetaSize => _model.Header.MetaSize;
/// <inheritdoc cref="Models.N3DS.CIAHeader.ContentSize"/>
public ulong ContentSize => _cia.Header.ContentSize;
public ulong ContentSize => _model.Header.ContentSize;
/// <inheritdoc cref="Models.N3DS.CIAHeader.ContentIndex"/>
public byte[] ContentIndex => _cia.Header.ContentIndex;
public byte[] ContentIndex => _model.Header.ContentIndex;
#endregion
#region Certificate Chain
/// <inheritdoc cref="Models.N3DS.CIA.CertificateChain"/>
public SabreTools.Models.N3DS.Certificate[] CertificateChain => _cia.CertificateChain;
public SabreTools.Models.N3DS.Certificate[] CertificateChain => _model.CertificateChain;
#endregion
#region Ticket
/// <inheritdoc cref="Models.N3DS.Ticket.SignatureType"/>
public SabreTools.Models.N3DS.SignatureType T_SignatureType => _cia.Ticket.SignatureType;
public SabreTools.Models.N3DS.SignatureType T_SignatureType => _model.Ticket.SignatureType;
/// <inheritdoc cref="Models.N3DS.Ticket.SignatureSize"/>
public ushort T_SignatureSize => _cia.Ticket.SignatureSize;
public ushort T_SignatureSize => _model.Ticket.SignatureSize;
/// <inheritdoc cref="Models.N3DS.Ticket.PaddingSize"/>
public byte T_PaddingSize => _cia.Ticket.PaddingSize;
public byte T_PaddingSize => _model.Ticket.PaddingSize;
/// <inheritdoc cref="Models.N3DS.Ticket.Signature"/>
public byte[] T_Signature => _cia.Ticket.Signature;
public byte[] T_Signature => _model.Ticket.Signature;
/// <inheritdoc cref="Models.N3DS.Ticket.Padding"/>
public byte[] T_Padding => _cia.Ticket.Padding;
public byte[] T_Padding => _model.Ticket.Padding;
/// <inheritdoc cref="Models.N3DS.Ticket.Issuer"/>
public string T_Issuer => _cia.Ticket.Issuer;
public string T_Issuer => _model.Ticket.Issuer;
/// <inheritdoc cref="Models.N3DS.Ticket.ECCPublicKey"/>
public byte[] T_ECCPublicKey => _cia.Ticket.ECCPublicKey;
public byte[] T_ECCPublicKey => _model.Ticket.ECCPublicKey;
/// <inheritdoc cref="Models.N3DS.Ticket.Version"/>
public byte T_Version => _cia.Ticket.Version;
public byte T_Version => _model.Ticket.Version;
/// <inheritdoc cref="Models.N3DS.Ticket.CaCrlVersion"/>
public byte T_CaCrlVersion => _cia.Ticket.CaCrlVersion;
public byte T_CaCrlVersion => _model.Ticket.CaCrlVersion;
/// <inheritdoc cref="Models.N3DS.Ticket.SignerCrlVersion"/>
public byte T_SignerCrlVersion => _cia.Ticket.SignerCrlVersion;
public byte T_SignerCrlVersion => _model.Ticket.SignerCrlVersion;
/// <inheritdoc cref="Models.N3DS.Ticket.TitleKey"/>
public byte[] T_TitleKey => _cia.Ticket.TitleKey;
public byte[] T_TitleKey => _model.Ticket.TitleKey;
/// <inheritdoc cref="Models.N3DS.Ticket.Reserved1"/>
public byte T_Reserved1 => _cia.Ticket.Reserved1;
public byte T_Reserved1 => _model.Ticket.Reserved1;
/// <inheritdoc cref="Models.N3DS.Ticket.TicketID"/>
public ulong T_TicketID => _cia.Ticket.TicketID;
public ulong T_TicketID => _model.Ticket.TicketID;
/// <inheritdoc cref="Models.N3DS.Ticket.ConsoleID"/>
public uint T_ConsoleID => _cia.Ticket.ConsoleID;
public uint T_ConsoleID => _model.Ticket.ConsoleID;
/// <inheritdoc cref="Models.N3DS.Ticket.TitleID"/>
public ulong T_TitleID => _cia.Ticket.TitleID;
public ulong T_TitleID => _model.Ticket.TitleID;
/// <inheritdoc cref="Models.N3DS.Ticket.Reserved2"/>
public byte[] T_Reserved2 => _cia.Ticket.Reserved2;
public byte[] T_Reserved2 => _model.Ticket.Reserved2;
/// <inheritdoc cref="Models.N3DS.Ticket.TicketTitleVersion"/>
public ushort T_TicketTitleVersion => _cia.Ticket.TicketTitleVersion;
public ushort T_TicketTitleVersion => _model.Ticket.TicketTitleVersion;
/// <inheritdoc cref="Models.N3DS.Ticket.Reserved3"/>
public byte[] T_Reserved3 => _cia.Ticket.Reserved3;
public byte[] T_Reserved3 => _model.Ticket.Reserved3;
/// <inheritdoc cref="Models.N3DS.Ticket.LicenseType"/>
public byte T_LicenseType => _cia.Ticket.LicenseType;
public byte T_LicenseType => _model.Ticket.LicenseType;
/// <inheritdoc cref="Models.N3DS.Ticket.CommonKeyYIndex"/>
public byte T_CommonKeyYIndex => _cia.Ticket.CommonKeyYIndex;
public byte T_CommonKeyYIndex => _model.Ticket.CommonKeyYIndex;
/// <inheritdoc cref="Models.N3DS.Ticket.Reserved4"/>
public byte[] T_Reserved4 => _cia.Ticket.Reserved4;
public byte[] T_Reserved4 => _model.Ticket.Reserved4;
/// <inheritdoc cref="Models.N3DS.Ticket.eShopAccountID"/>
public uint T_eShopAccountID => _cia.Ticket.eShopAccountID;
public uint T_eShopAccountID => _model.Ticket.eShopAccountID;
/// <inheritdoc cref="Models.N3DS.Ticket.Reserved5"/>
public byte T_Reserved5 => _cia.Ticket.Reserved5;
public byte T_Reserved5 => _model.Ticket.Reserved5;
/// <inheritdoc cref="Models.N3DS.Ticket.Audit"/>
public byte T_Audit => _cia.Ticket.Audit;
public byte T_Audit => _model.Ticket.Audit;
/// <inheritdoc cref="Models.N3DS.Ticket.Reserved6"/>
public byte[] T_Reserved6 => _cia.Ticket.Reserved6;
public byte[] T_Reserved6 => _model.Ticket.Reserved6;
/// <inheritdoc cref="Models.N3DS.Ticket.Limits"/>
public uint[] T_Limits => _cia.Ticket.Limits;
public uint[] T_Limits => _model.Ticket.Limits;
/// <inheritdoc cref="Models.N3DS.Ticket.ContentIndexSize"/>
public uint T_ContentIndexSize => _cia.Ticket.ContentIndexSize;
public uint T_ContentIndexSize => _model.Ticket.ContentIndexSize;
/// <inheritdoc cref="Models.N3DS.Ticket.ContentIndex"/>
public byte[] T_ContentIndex => _cia.Ticket.ContentIndex;
public byte[] T_ContentIndex => _model.Ticket.ContentIndex;
/// <inheritdoc cref="Models.N3DS.Ticket.CertificateChain"/>
public SabreTools.Models.N3DS.Certificate[] T_CertificateChain => _cia.Ticket.CertificateChain;
public SabreTools.Models.N3DS.Certificate[] T_CertificateChain => _model.Ticket.CertificateChain;
#endregion
#region Title Metadata
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SignatureType"/>
public SabreTools.Models.N3DS.SignatureType TMD_SignatureType => _cia.TMDFileData.SignatureType;
public SabreTools.Models.N3DS.SignatureType TMD_SignatureType => _model.TMDFileData.SignatureType;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SignatureSize"/>
public ushort TMD_SignatureSize => _cia.TMDFileData.SignatureSize;
public ushort TMD_SignatureSize => _model.TMDFileData.SignatureSize;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.PaddingSize"/>
public byte TMD_PaddingSize => _cia.TMDFileData.PaddingSize;
public byte TMD_PaddingSize => _model.TMDFileData.PaddingSize;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Signature"/>
public byte[] TMD_Signature => _cia.TMDFileData.Signature;
public byte[] TMD_Signature => _model.TMDFileData.Signature;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Padding1"/>
public byte[] TMD_Padding1 => _cia.TMDFileData.Padding1;
public byte[] TMD_Padding1 => _model.TMDFileData.Padding1;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Issuer"/>
public string TMD_Issuer => _cia.TMDFileData.Issuer;
public string TMD_Issuer => _model.TMDFileData.Issuer;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Version"/>
public byte TMD_Version => _cia.TMDFileData.Version;
public byte TMD_Version => _model.TMDFileData.Version;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.CaCrlVersion"/>
public byte TMD_CaCrlVersion => _cia.TMDFileData.CaCrlVersion;
public byte TMD_CaCrlVersion => _model.TMDFileData.CaCrlVersion;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SignerCrlVersion"/>
public byte TMD_SignerCrlVersion => _cia.TMDFileData.SignerCrlVersion;
public byte TMD_SignerCrlVersion => _model.TMDFileData.SignerCrlVersion;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Reserved1"/>
public byte TMD_Reserved1 => _cia.TMDFileData.Reserved1;
public byte TMD_Reserved1 => _model.TMDFileData.Reserved1;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SystemVersion"/>
public ulong TMD_SystemVersion => _cia.TMDFileData.SystemVersion;
public ulong TMD_SystemVersion => _model.TMDFileData.SystemVersion;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.TitleID"/>
public ulong TMD_TitleID => _cia.TMDFileData.TitleID;
public ulong TMD_TitleID => _model.TMDFileData.TitleID;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.TitleType"/>
public uint TMD_TitleType => _cia.TMDFileData.TitleType;
public uint TMD_TitleType => _model.TMDFileData.TitleType;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.GroupID"/>
public ushort TMD_GroupID => _cia.TMDFileData.GroupID;
public ushort TMD_GroupID => _model.TMDFileData.GroupID;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SaveDataSize"/>
public uint TMD_SaveDataSize => _cia.TMDFileData.SaveDataSize;
public uint TMD_SaveDataSize => _model.TMDFileData.SaveDataSize;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SRLPrivateSaveDataSize"/>
public uint TMD_SRLPrivateSaveDataSize => _cia.TMDFileData.SRLPrivateSaveDataSize;
public uint TMD_SRLPrivateSaveDataSize => _model.TMDFileData.SRLPrivateSaveDataSize;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Reserved2"/>
public byte[] TMD_Reserved2 => _cia.TMDFileData.Reserved2;
public byte[] TMD_Reserved2 => _model.TMDFileData.Reserved2;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SRLFlag"/>
public byte TMD_SRLFlag => _cia.TMDFileData.SRLFlag;
public byte TMD_SRLFlag => _model.TMDFileData.SRLFlag;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Reserved3"/>
public byte[] TMD_Reserved3 => _cia.TMDFileData.Reserved3;
public byte[] TMD_Reserved3 => _model.TMDFileData.Reserved3;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.AccessRights"/>
public uint TMD_AccessRights => _cia.TMDFileData.AccessRights;
public uint TMD_AccessRights => _model.TMDFileData.AccessRights;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.TitleVersion"/>
public ushort TMD_TitleVersion => _cia.TMDFileData.TitleVersion;
public ushort TMD_TitleVersion => _model.TMDFileData.TitleVersion;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.ContentCount"/>
public ushort TMD_ContentCount => _cia.TMDFileData.ContentCount;
public ushort TMD_ContentCount => _model.TMDFileData.ContentCount;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.BootContent"/>
public ushort TMD_BootContent => _cia.TMDFileData.BootContent;
public ushort TMD_BootContent => _model.TMDFileData.BootContent;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.Padding2"/>
public byte[] TMD_Padding2 => _cia.TMDFileData.Padding2;
public byte[] TMD_Padding2 => _model.TMDFileData.Padding2;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.SHA256HashContentInfoRecords"/>
public byte[] TMD_SHA256HashContentInfoRecords => _cia.TMDFileData.SHA256HashContentInfoRecords;
public byte[] TMD_SHA256HashContentInfoRecords => _model.TMDFileData.SHA256HashContentInfoRecords;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.ContentInfoRecords"/>
public SabreTools.Models.N3DS.ContentInfoRecord[] TMD_ContentInfoRecords => _cia.TMDFileData.ContentInfoRecords;
public SabreTools.Models.N3DS.ContentInfoRecord[] TMD_ContentInfoRecords => _model.TMDFileData.ContentInfoRecords;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.ContentChunkRecords"/>
public SabreTools.Models.N3DS.ContentChunkRecord[] TMD_ContentChunkRecords => _cia.TMDFileData.ContentChunkRecords;
public SabreTools.Models.N3DS.ContentChunkRecord[] TMD_ContentChunkRecords => _model.TMDFileData.ContentChunkRecords;
/// <inheritdoc cref="Models.N3DS.TitleMetadata.CertificateChain"/>
public SabreTools.Models.N3DS.Certificate[] TMD_CertificateChain => _cia.TMDFileData.CertificateChain;
public SabreTools.Models.N3DS.Certificate[] TMD_CertificateChain => _model.TMDFileData.CertificateChain;
#endregion
#region Partitions
/// <inheritdoc cref="Models.N3DS.CIA.Partitions"/>
public SabreTools.Models.N3DS.NCCHHeader[] Partitions => _cia.Partitions;
public SabreTools.Models.N3DS.NCCHHeader[] Partitions => _model.Partitions;
#endregion
#region Meta Data
/// <inheritdoc cref="Models.N3DS.MetaData.TitleIDDependencyList"/>
public byte[] MD_TitleIDDependencyList => _cia.MetaData?.TitleIDDependencyList;
public byte[] MD_TitleIDDependencyList => _model.MetaData?.TitleIDDependencyList;
/// <inheritdoc cref="Models.N3DS.MetaData.Reserved1"/>
public byte[] MD_Reserved1 => _cia.MetaData?.Reserved1;
public byte[] MD_Reserved1 => _model.MetaData?.Reserved1;
/// <inheritdoc cref="Models.N3DS.MetaData.CoreVersion"/>
public uint? MD_CoreVersion => _cia.MetaData?.CoreVersion;
public uint? MD_CoreVersion => _model.MetaData?.CoreVersion;
/// <inheritdoc cref="Models.N3DS.MetaData.Reserved2"/>
public byte[] MD_Reserved2 => _cia.MetaData?.Reserved2;
public byte[] MD_Reserved2 => _model.MetaData?.Reserved2;
/// <inheritdoc cref="Models.N3DS.MetaData.IconData"/>
public byte[] MD_IconData => _cia.MetaData?.IconData;
public byte[] MD_IconData => _model.MetaData?.IconData;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the cart
/// </summary>
private SabreTools.Models.N3DS.CIA _cia;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private CIA() { }
/// <inheritdoc/>
#if NET48
public CIA(SabreTools.Models.N3DS.CIA model, byte[] data, int offset)
#else
public CIA(SabreTools.Models.N3DS.CIA? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public CIA(SabreTools.Models.N3DS.CIA model, Stream data)
#else
public CIA(SabreTools.Models.N3DS.CIA? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a CIA archive from a byte array and offset
@@ -312,13 +320,14 @@ namespace BinaryObjectScanner.Wrappers
if (archive == null)
return null;
var wrapper = new CIA
try
{
_cia = archive,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new CIA(archive, data);
}
catch
{
return null;
}
}
#endregion
@@ -708,7 +717,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Meta Data Information:");
builder.AppendLine(" -------------------------");
if (_cia.MetaData == null || MetaSize == 0)
if (_model.MetaData == null || MetaSize == 0)
{
builder.AppendLine(value: " No meta file data");
}
@@ -726,7 +735,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_cia, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -5,12 +5,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class GCF : WrapperBase
public class GCF : WrapperBase<SabreTools.Models.GCF.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Half-Life Game Cache File (GCF)";
public override string DescriptionString => "Half-Life Game Cache File (GCF)";
#endregion
@@ -19,288 +19,288 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.GCF.Header.Dummy0"/>
public uint Dummy0 => _file.Header.Dummy0;
public uint Dummy0 => _model.Header.Dummy0;
/// <inheritdoc cref="Models.GCF.Header.MajorVersion"/>
public uint MajorVersion => _file.Header.MajorVersion;
public uint MajorVersion => _model.Header.MajorVersion;
/// <inheritdoc cref="Models.GCF.Header.MinorVersion"/>
public uint MinorVersion => _file.Header.MinorVersion;
public uint MinorVersion => _model.Header.MinorVersion;
/// <inheritdoc cref="Models.GCF.Header.CacheID"/>
public uint CacheID => _file.Header.CacheID;
public uint CacheID => _model.Header.CacheID;
/// <inheritdoc cref="Models.GCF.Header.LastVersionPlayed"/>
public uint LastVersionPlayed => _file.Header.LastVersionPlayed;
public uint LastVersionPlayed => _model.Header.LastVersionPlayed;
/// <inheritdoc cref="Models.GCF.Header.Dummy1"/>
public uint Dummy1 => _file.Header.Dummy1;
public uint Dummy1 => _model.Header.Dummy1;
/// <inheritdoc cref="Models.GCF.Header.Dummy2"/>
public uint Dummy2 => _file.Header.Dummy2;
public uint Dummy2 => _model.Header.Dummy2;
/// <inheritdoc cref="Models.GCF.Header.FileSize"/>
public uint FileSize => _file.Header.FileSize;
public uint FileSize => _model.Header.FileSize;
/// <inheritdoc cref="Models.GCF.Header.BlockSize"/>
public uint BlockSize => _file.Header.BlockSize;
public uint BlockSize => _model.Header.BlockSize;
/// <inheritdoc cref="Models.GCF.Header.BlockCount"/>
public uint BlockCount => _file.Header.BlockCount;
public uint BlockCount => _model.Header.BlockCount;
/// <inheritdoc cref="Models.GCF.Header.Dummy3"/>
public uint Dummy3 => _file.Header.Dummy3;
public uint Dummy3 => _model.Header.Dummy3;
#endregion
#region Block Entry Header
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.BlockCount"/>
public uint BEH_BlockCount => _file.BlockEntryHeader.BlockCount;
public uint BEH_BlockCount => _model.BlockEntryHeader.BlockCount;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.BlocksUsed"/>
public uint BEH_BlocksUsed => _file.BlockEntryHeader.BlocksUsed;
public uint BEH_BlocksUsed => _model.BlockEntryHeader.BlocksUsed;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.Dummy0"/>
public uint BEH_Dummy0 => _file.BlockEntryHeader.Dummy0;
public uint BEH_Dummy0 => _model.BlockEntryHeader.Dummy0;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.Dummy1"/>
public uint BEH_Dummy1 => _file.BlockEntryHeader.Dummy1;
public uint BEH_Dummy1 => _model.BlockEntryHeader.Dummy1;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.Dummy2"/>
public uint BEH_Dummy2 => _file.BlockEntryHeader.Dummy2;
public uint BEH_Dummy2 => _model.BlockEntryHeader.Dummy2;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.Dummy3"/>
public uint BEH_Dummy3 => _file.BlockEntryHeader.Dummy3;
public uint BEH_Dummy3 => _model.BlockEntryHeader.Dummy3;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.Dummy4"/>
public uint BEH_Dummy4 => _file.BlockEntryHeader.Dummy4;
public uint BEH_Dummy4 => _model.BlockEntryHeader.Dummy4;
/// <inheritdoc cref="Models.GCF.BlockEntryHeader.Checksum"/>
public uint BEH_Checksum => _file.BlockEntryHeader.Checksum;
public uint BEH_Checksum => _model.BlockEntryHeader.Checksum;
#endregion
#region Block Entries
/// <inheritdoc cref="Models.GCF.File.BlockEntries"/>
public SabreTools.Models.GCF.BlockEntry[] BlockEntries => _file.BlockEntries;
public SabreTools.Models.GCF.BlockEntry[] BlockEntries => _model.BlockEntries;
#endregion
#region Fragmentation Map Header
/// <inheritdoc cref="Models.GCF.FragmentationMapHeader.BlockCount"/>
public uint FMH_BlockCount => _file.FragmentationMapHeader.BlockCount;
public uint FMH_BlockCount => _model.FragmentationMapHeader.BlockCount;
/// <inheritdoc cref="Models.GCF.FragmentationMapHeader.FirstUnusedEntry"/>
public uint FMH_FirstUnusedEntry => _file.FragmentationMapHeader.FirstUnusedEntry;
public uint FMH_FirstUnusedEntry => _model.FragmentationMapHeader.FirstUnusedEntry;
/// <inheritdoc cref="Models.GCF.FragmentationMapHeader.Terminator"/>
public uint FMH_Terminator => _file.FragmentationMapHeader.Terminator;
public uint FMH_Terminator => _model.FragmentationMapHeader.Terminator;
/// <inheritdoc cref="Models.GCF.FragmentationMapHeader.Checksum"/>
public uint FMH_Checksum => _file.FragmentationMapHeader.Checksum;
public uint FMH_Checksum => _model.FragmentationMapHeader.Checksum;
#endregion
#region Fragmentation Maps
/// <inheritdoc cref="Models.GCF.File.FragmentationMaps"/>
public SabreTools.Models.GCF.FragmentationMap[] FragmentationMaps => _file.FragmentationMaps;
public SabreTools.Models.GCF.FragmentationMap[] FragmentationMaps => _model.FragmentationMaps;
#endregion
#region Block Entry Map Header
/// <inheritdoc cref="Models.GCF.BlockEntryMapHeader.BlockCount"/>
public uint? BEMH_BlockCount => _file.BlockEntryMapHeader?.BlockCount;
public uint? BEMH_BlockCount => _model.BlockEntryMapHeader?.BlockCount;
/// <inheritdoc cref="Models.GCF.BlockEntryMapHeader.FirstBlockEntryIndex"/>
public uint? BEMH_FirstBlockEntryIndex => _file.BlockEntryMapHeader?.FirstBlockEntryIndex;
public uint? BEMH_FirstBlockEntryIndex => _model.BlockEntryMapHeader?.FirstBlockEntryIndex;
/// <inheritdoc cref="Models.GCF.BlockEntryMapHeader.LastBlockEntryIndex"/>
public uint? BEMH_LastBlockEntryIndex => _file.BlockEntryMapHeader?.LastBlockEntryIndex;
public uint? BEMH_LastBlockEntryIndex => _model.BlockEntryMapHeader?.LastBlockEntryIndex;
/// <inheritdoc cref="Models.GCF.BlockEntryMapHeader.Dummy0"/>
public uint? BEMH_Dummy0 => _file.BlockEntryMapHeader?.Dummy0;
public uint? BEMH_Dummy0 => _model.BlockEntryMapHeader?.Dummy0;
/// <inheritdoc cref="Models.GCF.BlockEntryMapHeader.Checksum"/>
public uint? BEMH_Checksum => _file.BlockEntryMapHeader?.Checksum;
public uint? BEMH_Checksum => _model.BlockEntryMapHeader?.Checksum;
#endregion
#region Block Entry Maps
/// <inheritdoc cref="Models.GCF.File.BlockEntryMaps"/>
public SabreTools.Models.GCF.BlockEntryMap[] BlockEntryMaps => _file.BlockEntryMaps;
public SabreTools.Models.GCF.BlockEntryMap[] BlockEntryMaps => _model.BlockEntryMaps;
#endregion
#region Directory Header
/// <inheritdoc cref="Models.GCF.DirectoryHeader.Dummy0"/>
public uint DH_Dummy0 => _file.DirectoryHeader.Dummy0;
public uint DH_Dummy0 => _model.DirectoryHeader.Dummy0;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.CacheID"/>
public uint DH_CacheID => _file.DirectoryHeader.CacheID;
public uint DH_CacheID => _model.DirectoryHeader.CacheID;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.LastVersionPlayed"/>
public uint DH_LastVersionPlayed => _file.DirectoryHeader.LastVersionPlayed;
public uint DH_LastVersionPlayed => _model.DirectoryHeader.LastVersionPlayed;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.ItemCount"/>
public uint DH_ItemCount => _file.DirectoryHeader.ItemCount;
public uint DH_ItemCount => _model.DirectoryHeader.ItemCount;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.FileCount"/>
public uint DH_FileCount => _file.DirectoryHeader.FileCount;
public uint DH_FileCount => _model.DirectoryHeader.FileCount;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.Dummy1"/>
public uint DH_Dummy1 => _file.DirectoryHeader.Dummy1;
public uint DH_Dummy1 => _model.DirectoryHeader.Dummy1;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.DirectorySize"/>
public uint DH_DirectorySize => _file.DirectoryHeader.DirectorySize;
public uint DH_DirectorySize => _model.DirectoryHeader.DirectorySize;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.NameSize"/>
public uint DH_NameSize => _file.DirectoryHeader.NameSize;
public uint DH_NameSize => _model.DirectoryHeader.NameSize;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.Info1Count"/>
public uint DH_Info1Count => _file.DirectoryHeader.Info1Count;
public uint DH_Info1Count => _model.DirectoryHeader.Info1Count;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.CopyCount"/>
public uint DH_CopyCount => _file.DirectoryHeader.CopyCount;
public uint DH_CopyCount => _model.DirectoryHeader.CopyCount;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.LocalCount"/>
public uint DH_LocalCount => _file.DirectoryHeader.LocalCount;
public uint DH_LocalCount => _model.DirectoryHeader.LocalCount;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.Dummy2"/>
public uint DH_Dummy2 => _file.DirectoryHeader.Dummy2;
public uint DH_Dummy2 => _model.DirectoryHeader.Dummy2;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.Dummy3"/>
public uint DH_Dummy3 => _file.DirectoryHeader.Dummy3;
public uint DH_Dummy3 => _model.DirectoryHeader.Dummy3;
/// <inheritdoc cref="Models.GCF.DirectoryHeader.Checksum"/>
public uint DH_Checksum => _file.DirectoryHeader.Checksum;
public uint DH_Checksum => _model.DirectoryHeader.Checksum;
#endregion
#region Directory Entries
/// <inheritdoc cref="Models.GCF.File.DirectoryEntries"/>
public SabreTools.Models.GCF.DirectoryEntry[] DirectoryEntries => _file.DirectoryEntries;
public SabreTools.Models.GCF.DirectoryEntry[] DirectoryEntries => _model.DirectoryEntries;
#endregion
#region Directory Names
/// <inheritdoc cref="Models.GCF.File.DirectoryNames"/>
public System.Collections.Generic.Dictionary<long, string> DirectoryNames => _file.DirectoryNames;
public System.Collections.Generic.Dictionary<long, string> DirectoryNames => _model.DirectoryNames;
#endregion
#region Directory Info 1 Entries
/// <inheritdoc cref="Models.GCF.File.DirectoryInfo1Entries"/>
public SabreTools.Models.GCF.DirectoryInfo1Entry[] DirectoryInfo1Entries => _file.DirectoryInfo1Entries;
public SabreTools.Models.GCF.DirectoryInfo1Entry[] DirectoryInfo1Entries => _model.DirectoryInfo1Entries;
#endregion
#region Directory Info 2 Entries
/// <inheritdoc cref="Models.GCF.File.DirectoryInfo2Entries"/>
public SabreTools.Models.GCF.DirectoryInfo2Entry[] DirectoryInfo2Entries => _file.DirectoryInfo2Entries;
public SabreTools.Models.GCF.DirectoryInfo2Entry[] DirectoryInfo2Entries => _model.DirectoryInfo2Entries;
#endregion
#region Directory Copy Entries
/// <inheritdoc cref="Models.GCF.File.DirectoryCopyEntries"/>
public SabreTools.Models.GCF.DirectoryCopyEntry[] DirectoryCopyEntries => _file.DirectoryCopyEntries;
public SabreTools.Models.GCF.DirectoryCopyEntry[] DirectoryCopyEntries => _model.DirectoryCopyEntries;
#endregion
#region Directory Local Entries
/// <inheritdoc cref="Models.GCF.File.DirectoryLocalEntries"/>
public SabreTools.Models.GCF.DirectoryLocalEntry[] DirectoryLocalEntries => _file.DirectoryLocalEntries;
public SabreTools.Models.GCF.DirectoryLocalEntry[] DirectoryLocalEntries => _model.DirectoryLocalEntries;
#endregion
#region Directory Map Header
/// <inheritdoc cref="Models.GCF.DirectoryMapHeader.Dummy0"/>
public uint? DMH_Dummy0 => _file.DirectoryMapHeader?.Dummy0;
public uint? DMH_Dummy0 => _model.DirectoryMapHeader?.Dummy0;
/// <inheritdoc cref="Models.GCF.DirectoryMapHeader.Dummy1"/>
public uint? DMH_Dummy1 => _file.DirectoryMapHeader?.Dummy1;
public uint? DMH_Dummy1 => _model.DirectoryMapHeader?.Dummy1;
#endregion
#region Directory Map Entries
/// <inheritdoc cref="Models.GCF.File.DirectoryMapEntries"/>
public SabreTools.Models.GCF.DirectoryMapEntry[] DirectoryMapEntries => _file.DirectoryMapEntries;
public SabreTools.Models.GCF.DirectoryMapEntry[] DirectoryMapEntries => _model.DirectoryMapEntries;
#endregion
#region Checksum Header
/// <inheritdoc cref="Models.GCF.ChecksumHeader.Dummy0"/>
public uint CH_Dummy0 => _file.ChecksumHeader.Dummy0;
public uint CH_Dummy0 => _model.ChecksumHeader.Dummy0;
/// <inheritdoc cref="Models.GCF.ChecksumHeader.ChecksumSize"/>
public uint CH_ChecksumSize => _file.ChecksumHeader.ChecksumSize;
public uint CH_ChecksumSize => _model.ChecksumHeader.ChecksumSize;
#endregion
#region Checksum Map Header
/// <inheritdoc cref="Models.GCF.ChecksumMapHeader.Dummy0"/>
public uint CMH_Dummy0 => _file.ChecksumMapHeader.Dummy0;
public uint CMH_Dummy0 => _model.ChecksumMapHeader.Dummy0;
/// <inheritdoc cref="Models.GCF.ChecksumMapHeader.Dummy1"/>
public uint CMH_Dummy1 => _file.ChecksumMapHeader.Dummy1;
public uint CMH_Dummy1 => _model.ChecksumMapHeader.Dummy1;
/// <inheritdoc cref="Models.GCF.ChecksumMapHeader.ItemCount"/>
public uint CMH_ItemCount => _file.ChecksumMapHeader.ItemCount;
public uint CMH_ItemCount => _model.ChecksumMapHeader.ItemCount;
/// <inheritdoc cref="Models.GCF.ChecksumMapHeader.ChecksumCount"/>
public uint CMH_ChecksumCount => _file.ChecksumMapHeader.ChecksumCount;
public uint CMH_ChecksumCount => _model.ChecksumMapHeader.ChecksumCount;
#endregion
#region Checksum Map Entries
/// <inheritdoc cref="Models.GCF.File.ChecksumMapEntries"/>
public SabreTools.Models.GCF.ChecksumMapEntry[] ChecksumMapEntries => _file.ChecksumMapEntries;
public SabreTools.Models.GCF.ChecksumMapEntry[] ChecksumMapEntries => _model.ChecksumMapEntries;
#endregion
#region Checksum Entries
/// <inheritdoc cref="Models.GCF.File.ChecksumEntries"/>
public SabreTools.Models.GCF.ChecksumEntry[] ChecksumEntries => _file.ChecksumEntries;
public SabreTools.Models.GCF.ChecksumEntry[] ChecksumEntries => _model.ChecksumEntries;
#endregion
#region Data Block Header
/// <inheritdoc cref="Models.GCF.DataBlockHeader.LastVersionPlayed"/>
public uint DBH_LastVersionPlayed => _file.DataBlockHeader.LastVersionPlayed;
public uint DBH_LastVersionPlayed => _model.DataBlockHeader.LastVersionPlayed;
/// <inheritdoc cref="Models.GCF.DataBlockHeader.BlockCount"/>
public uint DBH_BlockCount => _file.DataBlockHeader.BlockCount;
public uint DBH_BlockCount => _model.DataBlockHeader.BlockCount;
/// <inheritdoc cref="Models.GCF.DataBlockHeader.BlockSize"/>
public uint DBH_BlockSize => _file.DataBlockHeader.BlockSize;
public uint DBH_BlockSize => _model.DataBlockHeader.BlockSize;
/// <inheritdoc cref="Models.GCF.DataBlockHeader.FirstBlockOffset"/>
public uint DBH_FirstBlockOffset => _file.DataBlockHeader.FirstBlockOffset;
public uint DBH_FirstBlockOffset => _model.DataBlockHeader.FirstBlockOffset;
/// <inheritdoc cref="Models.GCF.DataBlockHeader.BlocksUsed"/>
public uint DBH_BlocksUsed => _file.DataBlockHeader.BlocksUsed;
public uint DBH_BlocksUsed => _model.DataBlockHeader.BlocksUsed;
/// <inheritdoc cref="Models.GCF.DataBlockHeader.Checksum"/>
public uint DBH_Checksum => _file.DataBlockHeader.Checksum;
public uint DBH_Checksum => _model.DataBlockHeader.Checksum;
#endregion
@@ -403,11 +403,6 @@ namespace BinaryObjectScanner.Wrappers
#region Instance Variables
/// <summary>
/// Internal representation of the GCF
/// </summary>
private SabreTools.Models.GCF.File _file;
/// <summary>
/// Set of all files and their information
/// </summary>
@@ -422,10 +417,27 @@ namespace BinaryObjectScanner.Wrappers
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private GCF() { }
/// <inheritdoc/>
#if NET48
public GCF(SabreTools.Models.GCF.File model, byte[] data, int offset)
#else
public GCF(SabreTools.Models.GCF.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public GCF(SabreTools.Models.GCF.File model, Stream data)
#else
public GCF(SabreTools.Models.GCF.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an GCF from a byte array and offset
@@ -463,13 +475,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new GCF
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new GCF(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -641,7 +654,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Block Entry Map Header Information:");
builder.AppendLine(" -------------------------");
if (_file.BlockEntryMapHeader == null)
if (_model.BlockEntryMapHeader == null)
{
builder.AppendLine($" No block entry map header");
}
@@ -841,7 +854,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Directory Map Header Information:");
builder.AppendLine(" -------------------------");
if (_file.DirectoryMapHeader == null)
if (_model.DirectoryMapHeader == null)
{
builder.AppendLine($" No directory map header");
}
@@ -974,7 +987,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -0,0 +1,24 @@
using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public interface IWrapper
{
/// <summary>
/// Get a human-readable description of the wrapper
/// </summary>
string Description();
/// <summary>
/// Export the item information as pretty-printed text
/// </summary>
StringBuilder PrettyPrint();
#if NET6_0_OR_GREATER
/// <summary>
/// Export the item information as JSON
/// </summary>
string ExportJSON();
#endif
}
}

View File

@@ -5,12 +5,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public partial class InstallShieldCabinet : WrapperBase
public partial class InstallShieldCabinet : WrapperBase<SabreTools.Models.InstallShieldCabinet.Cabinet>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "InstallShield Cabinet";
public override string DescriptionString => "InstallShield Cabinet";
#endregion
@@ -19,193 +19,193 @@ namespace BinaryObjectScanner.Wrappers
#region Common Header
/// <inheritdoc cref="Models.InstallShieldCabinet.CommonHeader.Signature"/>
public string Signature => _cabinet.CommonHeader.Signature;
public string Signature => _model.CommonHeader.Signature;
/// <inheritdoc cref="Models.InstallShieldCabinet.CommonHeader.Version"/>
public uint Version => _cabinet.CommonHeader.Version;
public uint Version => _model.CommonHeader.Version;
/// <inheritdoc cref="Models.InstallShieldCabinet.CommonHeader.VolumeInfo"/>
public uint VolumeInfo => _cabinet.CommonHeader.VolumeInfo;
public uint VolumeInfo => _model.CommonHeader.VolumeInfo;
/// <inheritdoc cref="Models.InstallShieldCabinet.CommonHeader.DescriptorOffset"/>
public uint DescriptorOffset => _cabinet.CommonHeader.DescriptorOffset;
public uint DescriptorOffset => _model.CommonHeader.DescriptorOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.CommonHeader.DescriptorSize"/>
public uint DescriptorSize => _cabinet.CommonHeader.DescriptorSize;
public uint DescriptorSize => _model.CommonHeader.DescriptorSize;
#endregion
#region Volume Header
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.DataOffset"/>
public uint DataOffset => _cabinet.VolumeHeader.DataOffset;
public uint DataOffset => _model.VolumeHeader.DataOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.DataOffsetHigh"/>
public uint DataOffsetHigh => _cabinet.VolumeHeader.DataOffsetHigh;
public uint DataOffsetHigh => _model.VolumeHeader.DataOffsetHigh;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileIndex"/>
public uint FirstFileIndex => _cabinet.VolumeHeader.FirstFileIndex;
public uint FirstFileIndex => _model.VolumeHeader.FirstFileIndex;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileIndex"/>
public uint LastFileIndex => _cabinet.VolumeHeader.LastFileIndex;
public uint LastFileIndex => _model.VolumeHeader.LastFileIndex;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileOffset"/>
public uint FirstFileOffset => _cabinet.VolumeHeader.FirstFileOffset;
public uint FirstFileOffset => _model.VolumeHeader.FirstFileOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileOffsetHigh"/>
public uint FirstFileOffsetHigh => _cabinet.VolumeHeader.FirstFileOffsetHigh;
public uint FirstFileOffsetHigh => _model.VolumeHeader.FirstFileOffsetHigh;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileSizeExpanded"/>
public uint FirstFileSizeExpanded => _cabinet.VolumeHeader.FirstFileSizeExpanded;
public uint FirstFileSizeExpanded => _model.VolumeHeader.FirstFileSizeExpanded;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileSizeExpandedHigh"/>
public uint FirstFileSizeExpandedHigh => _cabinet.VolumeHeader.FirstFileSizeExpandedHigh;
public uint FirstFileSizeExpandedHigh => _model.VolumeHeader.FirstFileSizeExpandedHigh;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileSizeCompressed"/>
public uint FirstFileSizeCompressed => _cabinet.VolumeHeader.FirstFileSizeCompressed;
public uint FirstFileSizeCompressed => _model.VolumeHeader.FirstFileSizeCompressed;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.FirstFileSizeCompressedHigh"/>
public uint FirstFileSizeCompressedHigh => _cabinet.VolumeHeader.FirstFileSizeCompressedHigh;
public uint FirstFileSizeCompressedHigh => _model.VolumeHeader.FirstFileSizeCompressedHigh;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileOffset"/>
public uint LastFileOffset => _cabinet.VolumeHeader.LastFileOffset;
public uint LastFileOffset => _model.VolumeHeader.LastFileOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileOffsetHigh"/>
public uint LastFileOffsetHigh => _cabinet.VolumeHeader.LastFileOffsetHigh;
public uint LastFileOffsetHigh => _model.VolumeHeader.LastFileOffsetHigh;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileSizeExpanded"/>
public uint LastFileSizeExpanded => _cabinet.VolumeHeader.LastFileSizeExpanded;
public uint LastFileSizeExpanded => _model.VolumeHeader.LastFileSizeExpanded;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileSizeExpandedHigh"/>
public uint LastFileSizeExpandedHigh => _cabinet.VolumeHeader.LastFileSizeExpandedHigh;
public uint LastFileSizeExpandedHigh => _model.VolumeHeader.LastFileSizeExpandedHigh;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileSizeCompressed"/>
public uint LastFileSizeCompressed => _cabinet.VolumeHeader.LastFileSizeCompressed;
public uint LastFileSizeCompressed => _model.VolumeHeader.LastFileSizeCompressed;
/// <inheritdoc cref="Models.InstallShieldCabinet.VolumeHeader.LastFileSizeCompressedHigh"/>
public uint LastFileSizeCompressedHigh => _cabinet.VolumeHeader.LastFileSizeCompressedHigh;
public uint LastFileSizeCompressedHigh => _model.VolumeHeader.LastFileSizeCompressedHigh;
#endregion
#region Descriptor
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.StringsOffset"/>
public uint StringsOffset => _cabinet.Descriptor.StringsOffset;
public uint StringsOffset => _model.Descriptor.StringsOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved0"/>
public byte[] Reserved0 => _cabinet.Descriptor.Reserved0;
public byte[] Reserved0 => _model.Descriptor.Reserved0;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.ComponentListOffset"/>
public uint ComponentListOffset => _cabinet.Descriptor.ComponentListOffset;
public uint ComponentListOffset => _model.Descriptor.ComponentListOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.FileTableOffset"/>
public uint FileTableOffset => _cabinet.Descriptor.FileTableOffset;
public uint FileTableOffset => _model.Descriptor.FileTableOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved1"/>
public byte[] Reserved1 => _cabinet.Descriptor.Reserved1;
public byte[] Reserved1 => _model.Descriptor.Reserved1;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.FileTableSize"/>
public uint FileTableSize => _cabinet.Descriptor.FileTableSize;
public uint FileTableSize => _model.Descriptor.FileTableSize;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.FileTableSize2"/>
public uint FileTableSize2 => _cabinet.Descriptor.FileTableSize2;
public uint FileTableSize2 => _model.Descriptor.FileTableSize2;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.DirectoryCount"/>
public ushort DirectoryCount => _cabinet.Descriptor.DirectoryCount;
public ushort DirectoryCount => _model.Descriptor.DirectoryCount;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved2"/>
public byte[] Reserved2 => _cabinet.Descriptor.Reserved2;
public byte[] Reserved2 => _model.Descriptor.Reserved2;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved3"/>
public byte[] Reserved3 => _cabinet.Descriptor.Reserved3;
public byte[] Reserved3 => _model.Descriptor.Reserved3;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved4"/>
public byte[] Reserved4 => _cabinet.Descriptor.Reserved4;
public byte[] Reserved4 => _model.Descriptor.Reserved4;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.FileCount"/>
public uint FileCount => _cabinet.Descriptor.FileCount;
public uint FileCount => _model.Descriptor.FileCount;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.FileTableOffset2"/>
public uint FileTableOffset2 => _cabinet.Descriptor.FileTableOffset2;
public uint FileTableOffset2 => _model.Descriptor.FileTableOffset2;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.ComponentTableInfoCount"/>
public ushort ComponentTableInfoCount => _cabinet.Descriptor.ComponentTableInfoCount;
public ushort ComponentTableInfoCount => _model.Descriptor.ComponentTableInfoCount;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.ComponentTableOffset"/>
public uint ComponentTableOffset => _cabinet.Descriptor.ComponentTableOffset;
public uint ComponentTableOffset => _model.Descriptor.ComponentTableOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved5"/>
public byte[] Reserved5 => _cabinet.Descriptor.Reserved5;
public byte[] Reserved5 => _model.Descriptor.Reserved5;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved6"/>
public byte[] Reserved6 => _cabinet.Descriptor.Reserved6;
public byte[] Reserved6 => _model.Descriptor.Reserved6;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.FileGroupOffsets"/>
public uint[] D_FileGroupOffsets => _cabinet.Descriptor.FileGroupOffsets;
public uint[] D_FileGroupOffsets => _model.Descriptor.FileGroupOffsets;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.ComponentOffsets"/>
public uint[] D_ComponentOffsets => _cabinet.Descriptor.ComponentOffsets;
public uint[] D_ComponentOffsets => _model.Descriptor.ComponentOffsets;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.SetupTypesOffset"/>
public uint SetupTypesOffset => _cabinet.Descriptor.SetupTypesOffset;
public uint SetupTypesOffset => _model.Descriptor.SetupTypesOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.SetupTableOffset"/>
public uint SetupTableOffset => _cabinet.Descriptor.SetupTableOffset;
public uint SetupTableOffset => _model.Descriptor.SetupTableOffset;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved7"/>
public byte[] Reserved7 => _cabinet.Descriptor.Reserved7;
public byte[] Reserved7 => _model.Descriptor.Reserved7;
/// <inheritdoc cref="Models.InstallShieldCabinet.Descriptor.Reserved8"/>
public byte[] Reserved8 => _cabinet.Descriptor.Reserved8;
public byte[] Reserved8 => _model.Descriptor.Reserved8;
#endregion
#region File Descriptor Offsets
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.FileDescriptorOffsets"/>
public uint[] FileDescriptorOffsets => _cabinet.FileDescriptorOffsets;
public uint[] FileDescriptorOffsets => _model.FileDescriptorOffsets;
#endregion
#region Directory Descriptors
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.DirectoryNames"/>
public string[] DirectoryNames => _cabinet.DirectoryNames;
public string[] DirectoryNames => _model.DirectoryNames;
#endregion
#region File Descriptors
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.FileDescriptors"/>
public SabreTools.Models.InstallShieldCabinet.FileDescriptor[] FileDescriptors => _cabinet.FileDescriptors;
public SabreTools.Models.InstallShieldCabinet.FileDescriptor[] FileDescriptors => _model.FileDescriptors;
#endregion
#region File Group Offsets
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.FileGroupOffsets"/>
public Dictionary<long, SabreTools.Models.InstallShieldCabinet.OffsetList> FileGroupOffsets => _cabinet.FileGroupOffsets;
public Dictionary<long, SabreTools.Models.InstallShieldCabinet.OffsetList> FileGroupOffsets => _model.FileGroupOffsets;
#endregion
#region File Groups
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.FileGroups"/>
public SabreTools.Models.InstallShieldCabinet.FileGroup[] FileGroups => _cabinet.FileGroups;
public SabreTools.Models.InstallShieldCabinet.FileGroup[] FileGroups => _model.FileGroups;
#endregion
#region Component Offsets
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.ComponentOffsets"/>
public Dictionary<long, SabreTools.Models.InstallShieldCabinet.OffsetList> ComponentOffsets => _cabinet.ComponentOffsets;
public Dictionary<long, SabreTools.Models.InstallShieldCabinet.OffsetList> ComponentOffsets => _model.ComponentOffsets;
#endregion
#region Components
/// <inheritdoc cref="Models.InstallShieldCabinet.Cabinet.Components"/>
public SabreTools.Models.InstallShieldCabinet.Component[] Components => _cabinet.Components;
public SabreTools.Models.InstallShieldCabinet.Component[] Components => _model.Components;
#endregion
@@ -238,21 +238,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the cabinet
/// </summary>
private SabreTools.Models.InstallShieldCabinet.Cabinet _cabinet;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private InstallShieldCabinet() { }
/// <inheritdoc/>
#if NET48
public InstallShieldCabinet(SabreTools.Models.InstallShieldCabinet.Cabinet model, byte[] data, int offset)
#else
public InstallShieldCabinet(SabreTools.Models.InstallShieldCabinet.Cabinet? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public InstallShieldCabinet(SabreTools.Models.InstallShieldCabinet.Cabinet model, Stream data)
#else
public InstallShieldCabinet(SabreTools.Models.InstallShieldCabinet.Cabinet? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an InstallShield Cabinet from a byte array and offset
@@ -290,13 +298,14 @@ namespace BinaryObjectScanner.Wrappers
if (cabinet == null)
return null;
var wrapper = new InstallShieldCabinet
try
{
_cabinet = cabinet,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new InstallShieldCabinet(cabinet, data);
}
catch
{
return null;
}
}
#endregion
@@ -743,7 +752,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_cabinet, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class LinearExecutable : WrapperBase
public class LinearExecutable : WrapperBase<SabreTools.Models.LinearExecutable.Executable>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Linear Executable (LE/LX)";
public override string DescriptionString => "Linear Executable (LE/LX)";
#endregion
@@ -20,65 +20,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
@@ -87,198 +87,198 @@ namespace BinaryObjectScanner.Wrappers
#region Information Block
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.Signature"/>
public string Signature => _executable.InformationBlock.Signature;
public string Signature => _model.InformationBlock.Signature;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ByteOrder"/>
public SabreTools.Models.LinearExecutable.ByteOrder ByteOrder => _executable.InformationBlock.ByteOrder;
public SabreTools.Models.LinearExecutable.ByteOrder ByteOrder => _model.InformationBlock.ByteOrder;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.WordOrder"/>
public SabreTools.Models.LinearExecutable.WordOrder WordOrder => _executable.InformationBlock.WordOrder;
public SabreTools.Models.LinearExecutable.WordOrder WordOrder => _model.InformationBlock.WordOrder;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ExecutableFormatLevel"/>
public uint ExecutableFormatLevel => _executable.InformationBlock.ExecutableFormatLevel;
public uint ExecutableFormatLevel => _model.InformationBlock.ExecutableFormatLevel;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.CPUType"/>
public SabreTools.Models.LinearExecutable.CPUType CPUType => _executable.InformationBlock.CPUType;
public SabreTools.Models.LinearExecutable.CPUType CPUType => _model.InformationBlock.CPUType;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ModuleOS"/>
public SabreTools.Models.LinearExecutable.OperatingSystem ModuleOS => _executable.InformationBlock.ModuleOS;
public SabreTools.Models.LinearExecutable.OperatingSystem ModuleOS => _model.InformationBlock.ModuleOS;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ModuleVersion"/>
public uint ModuleVersion => _executable.InformationBlock.ModuleVersion;
public uint ModuleVersion => _model.InformationBlock.ModuleVersion;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ModuleTypeFlags"/>
public SabreTools.Models.LinearExecutable.ModuleFlags ModuleTypeFlags => _executable.InformationBlock.ModuleTypeFlags;
public SabreTools.Models.LinearExecutable.ModuleFlags ModuleTypeFlags => _model.InformationBlock.ModuleTypeFlags;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ModuleNumberPages"/>
public uint ModuleNumberPages => _executable.InformationBlock.ModuleNumberPages;
public uint ModuleNumberPages => _model.InformationBlock.ModuleNumberPages;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.InitialObjectCS"/>
public uint InitialObjectCS => _executable.InformationBlock.InitialObjectCS;
public uint InitialObjectCS => _model.InformationBlock.InitialObjectCS;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.InitialEIP"/>
public uint InitialEIP => _executable.InformationBlock.InitialEIP;
public uint InitialEIP => _model.InformationBlock.InitialEIP;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.InitialObjectSS"/>
public uint InitialObjectSS => _executable.InformationBlock.InitialObjectSS;
public uint InitialObjectSS => _model.InformationBlock.InitialObjectSS;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.InitialESP"/>
public uint InitialESP => _executable.InformationBlock.InitialESP;
public uint InitialESP => _model.InformationBlock.InitialESP;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.MemoryPageSize"/>
public uint MemoryPageSize => _executable.InformationBlock.MemoryPageSize;
public uint MemoryPageSize => _model.InformationBlock.MemoryPageSize;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.BytesOnLastPage"/>
public uint BytesOnLastPage => _executable.InformationBlock.BytesOnLastPage;
public uint BytesOnLastPage => _model.InformationBlock.BytesOnLastPage;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.FixupSectionSize"/>
public uint FixupSectionSize => _executable.InformationBlock.FixupSectionSize;
public uint FixupSectionSize => _model.InformationBlock.FixupSectionSize;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.FixupSectionChecksum"/>
public uint FixupSectionChecksum => _executable.InformationBlock.FixupSectionChecksum;
public uint FixupSectionChecksum => _model.InformationBlock.FixupSectionChecksum;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.LoaderSectionSize"/>
public uint LoaderSectionSize => _executable.InformationBlock.LoaderSectionSize;
public uint LoaderSectionSize => _model.InformationBlock.LoaderSectionSize;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.LoaderSectionChecksum"/>
public uint LoaderSectionChecksum => _executable.InformationBlock.LoaderSectionChecksum;
public uint LoaderSectionChecksum => _model.InformationBlock.LoaderSectionChecksum;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ObjectTableOffset"/>
public uint ObjectTableOffset => _executable.InformationBlock.ObjectTableOffset;
public uint ObjectTableOffset => _model.InformationBlock.ObjectTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ObjectTableCount"/>
public uint ObjectTableCount => _executable.InformationBlock.ObjectTableCount;
public uint ObjectTableCount => _model.InformationBlock.ObjectTableCount;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ObjectPageMapOffset"/>
public uint ObjectPageMapOffset => _executable.InformationBlock.ObjectPageMapOffset;
public uint ObjectPageMapOffset => _model.InformationBlock.ObjectPageMapOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ObjectIterateDataMapOffset"/>
public uint ObjectIterateDataMapOffset => _executable.InformationBlock.ObjectIterateDataMapOffset;
public uint ObjectIterateDataMapOffset => _model.InformationBlock.ObjectIterateDataMapOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ResourceTableOffset"/>
public uint ResourceTableOffset => _executable.InformationBlock.ResourceTableOffset;
public uint ResourceTableOffset => _model.InformationBlock.ResourceTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ResourceTableCount"/>
public uint ResourceTableCount => _executable.InformationBlock.ResourceTableCount;
public uint ResourceTableCount => _model.InformationBlock.ResourceTableCount;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ResidentNamesTableOffset"/>
public uint ResidentNamesTableOffset => _executable.InformationBlock.ResidentNamesTableOffset;
public uint ResidentNamesTableOffset => _model.InformationBlock.ResidentNamesTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.EntryTableOffset"/>
public uint EntryTableOffset => _executable.InformationBlock.EntryTableOffset;
public uint EntryTableOffset => _model.InformationBlock.EntryTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ModuleDirectivesTableOffset"/>
public uint ModuleDirectivesTableOffset => _executable.InformationBlock.ModuleDirectivesTableOffset;
public uint ModuleDirectivesTableOffset => _model.InformationBlock.ModuleDirectivesTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ModuleDirectivesCount"/>
public uint ModuleDirectivesCount => _executable.InformationBlock.ModuleDirectivesCount;
public uint ModuleDirectivesCount => _model.InformationBlock.ModuleDirectivesCount;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.FixupPageTableOffset"/>
public uint FixupPageTableOffset => _executable.InformationBlock.FixupPageTableOffset;
public uint FixupPageTableOffset => _model.InformationBlock.FixupPageTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.FixupRecordTableOffset"/>
public uint FixupRecordTableOffset => _executable.InformationBlock.FixupRecordTableOffset;
public uint FixupRecordTableOffset => _model.InformationBlock.FixupRecordTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ImportedModulesNameTableOffset"/>
public uint ImportedModulesNameTableOffset => _executable.InformationBlock.ImportedModulesNameTableOffset;
public uint ImportedModulesNameTableOffset => _model.InformationBlock.ImportedModulesNameTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ImportedModulesCount"/>
public uint ImportedModulesCount => _executable.InformationBlock.ImportedModulesCount;
public uint ImportedModulesCount => _model.InformationBlock.ImportedModulesCount;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ImportProcedureNameTableOffset"/>
public uint ImportProcedureNameTableOffset => _executable.InformationBlock.ImportProcedureNameTableOffset;
public uint ImportProcedureNameTableOffset => _model.InformationBlock.ImportProcedureNameTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.PerPageChecksumTableOffset"/>
public uint PerPageChecksumTableOffset => _executable.InformationBlock.PerPageChecksumTableOffset;
public uint PerPageChecksumTableOffset => _model.InformationBlock.PerPageChecksumTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.DataPagesOffset"/>
public uint DataPagesOffset => _executable.InformationBlock.DataPagesOffset;
public uint DataPagesOffset => _model.InformationBlock.DataPagesOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.PreloadPageCount"/>
public uint PreloadPageCount => _executable.InformationBlock.PreloadPageCount;
public uint PreloadPageCount => _model.InformationBlock.PreloadPageCount;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.NonResidentNamesTableOffset"/>
public uint NonResidentNamesTableOffset => _executable.InformationBlock.NonResidentNamesTableOffset;
public uint NonResidentNamesTableOffset => _model.InformationBlock.NonResidentNamesTableOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.NonResidentNamesTableLength"/>
public uint NonResidentNamesTableLength => _executable.InformationBlock.NonResidentNamesTableLength;
public uint NonResidentNamesTableLength => _model.InformationBlock.NonResidentNamesTableLength;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.NonResidentNamesTableChecksum"/>
public uint NonResidentNamesTableChecksum => _executable.InformationBlock.NonResidentNamesTableChecksum;
public uint NonResidentNamesTableChecksum => _model.InformationBlock.NonResidentNamesTableChecksum;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.AutomaticDataObject"/>
public uint AutomaticDataObject => _executable.InformationBlock.AutomaticDataObject;
public uint AutomaticDataObject => _model.InformationBlock.AutomaticDataObject;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.DebugInformationOffset"/>
public uint DebugInformationOffset => _executable.InformationBlock.DebugInformationOffset;
public uint DebugInformationOffset => _model.InformationBlock.DebugInformationOffset;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.DebugInformationLength"/>
public uint DebugInformationLength => _executable.InformationBlock.DebugInformationLength;
public uint DebugInformationLength => _model.InformationBlock.DebugInformationLength;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.PreloadInstancePagesNumber"/>
public uint PreloadInstancePagesNumber => _executable.InformationBlock.PreloadInstancePagesNumber;
public uint PreloadInstancePagesNumber => _model.InformationBlock.PreloadInstancePagesNumber;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.DemandInstancePagesNumber"/>
public uint DemandInstancePagesNumber => _executable.InformationBlock.DemandInstancePagesNumber;
public uint DemandInstancePagesNumber => _model.InformationBlock.DemandInstancePagesNumber;
/// <inheritdoc cref="Models.LinearExecutable.InformationBlock.ExtraHeapAllocation"/>
public uint ExtraHeapAllocation => _executable.InformationBlock.ExtraHeapAllocation;
public uint ExtraHeapAllocation => _model.InformationBlock.ExtraHeapAllocation;
#endregion
#region Tables
/// <inheritdoc cref="Models.LinearExecutable.ObjectTable"/>
public SabreTools.Models.LinearExecutable.ObjectTableEntry[] ObjectTable => _executable.ObjectTable;
public SabreTools.Models.LinearExecutable.ObjectTableEntry[] ObjectTable => _model.ObjectTable;
/// <inheritdoc cref="Models.LinearExecutable.ObjectPageMap"/>
public SabreTools.Models.LinearExecutable.ObjectPageMapEntry[] ObjectPageMap => _executable.ObjectPageMap;
public SabreTools.Models.LinearExecutable.ObjectPageMapEntry[] ObjectPageMap => _model.ObjectPageMap;
/// <inheritdoc cref="Models.LinearExecutable.ResourceTable"/>
public SabreTools.Models.LinearExecutable.ResourceTableEntry[] ResourceTable => _executable.ResourceTable;
public SabreTools.Models.LinearExecutable.ResourceTableEntry[] ResourceTable => _model.ResourceTable;
/// <inheritdoc cref="Models.LinearExecutable.ResidentNamesTable"/>
public SabreTools.Models.LinearExecutable.ResidentNamesTableEntry[] ResidentNamesTable => _executable.ResidentNamesTable;
public SabreTools.Models.LinearExecutable.ResidentNamesTableEntry[] ResidentNamesTable => _model.ResidentNamesTable;
/// <inheritdoc cref="Models.LinearExecutable.EntryTable"/>
public SabreTools.Models.LinearExecutable.EntryTableBundle[] EntryTable => _executable.EntryTable;
public SabreTools.Models.LinearExecutable.EntryTableBundle[] EntryTable => _model.EntryTable;
/// <inheritdoc cref="Models.LinearExecutable.ModuleFormatDirectivesTable"/>
public SabreTools.Models.LinearExecutable.ModuleFormatDirectivesTableEntry[] ModuleFormatDirectivesTable => _executable.ModuleFormatDirectivesTable;
public SabreTools.Models.LinearExecutable.ModuleFormatDirectivesTableEntry[] ModuleFormatDirectivesTable => _model.ModuleFormatDirectivesTable;
/// <inheritdoc cref="Models.LinearExecutable.VerifyRecordDirectiveTable"/>
public SabreTools.Models.LinearExecutable.VerifyRecordDirectiveTableEntry[] VerifyRecordDirectiveTable => _executable.VerifyRecordDirectiveTable;
public SabreTools.Models.LinearExecutable.VerifyRecordDirectiveTableEntry[] VerifyRecordDirectiveTable => _model.VerifyRecordDirectiveTable;
/// <inheritdoc cref="Models.LinearExecutable.PerPageChecksumTable"/>
public SabreTools.Models.LinearExecutable.PerPageChecksumTableEntry[] PerPageChecksumTable => _executable.PerPageChecksumTable;
public SabreTools.Models.LinearExecutable.PerPageChecksumTableEntry[] PerPageChecksumTable => _model.PerPageChecksumTable;
/// <inheritdoc cref="Models.LinearExecutable.FixupPageTable"/>
public SabreTools.Models.LinearExecutable.FixupPageTableEntry[] FixupPageTable => _executable.FixupPageTable;
public SabreTools.Models.LinearExecutable.FixupPageTableEntry[] FixupPageTable => _model.FixupPageTable;
/// <inheritdoc cref="Models.LinearExecutable.FixupRecordTable"/>
public SabreTools.Models.LinearExecutable.FixupRecordTableEntry[] FixupRecordTable => _executable.FixupRecordTable;
public SabreTools.Models.LinearExecutable.FixupRecordTableEntry[] FixupRecordTable => _model.FixupRecordTable;
/// <inheritdoc cref="Models.LinearExecutable.ImportModuleNameTable"/>
public SabreTools.Models.LinearExecutable.ImportModuleNameTableEntry[] ImportModuleNameTable => _executable.ImportModuleNameTable;
public SabreTools.Models.LinearExecutable.ImportModuleNameTableEntry[] ImportModuleNameTable => _model.ImportModuleNameTable;
/// <inheritdoc cref="Models.LinearExecutable.ImportModuleProcedureNameTable"/>
public SabreTools.Models.LinearExecutable.ImportModuleProcedureNameTableEntry[] ImportModuleProcedureNameTable => _executable.ImportModuleProcedureNameTable;
public SabreTools.Models.LinearExecutable.ImportModuleProcedureNameTableEntry[] ImportModuleProcedureNameTable => _model.ImportModuleProcedureNameTable;
/// <inheritdoc cref="Models.LinearExecutable.NonResidentNamesTable"/>
public SabreTools.Models.LinearExecutable.NonResidentNamesTableEntry[] NonResidentNamesTable => _executable.NonResidentNamesTable;
public SabreTools.Models.LinearExecutable.NonResidentNamesTableEntry[] NonResidentNamesTable => _model.NonResidentNamesTable;
#endregion
#region Debug Information
/// <inheritdoc cref="Models.LinearExecutable.DebugInformation.Signature"/>
public string DI_Signature => _executable.DebugInformation?.Signature;
public string DI_Signature => _model.DebugInformation?.Signature;
/// <inheritdoc cref="Models.LinearExecutable.DebugInformation.FormatType"/>
public SabreTools.Models.LinearExecutable.DebugFormatType? DI_FormatType => _executable.DebugInformation?.FormatType;
public SabreTools.Models.LinearExecutable.DebugFormatType? DI_FormatType => _model.DebugInformation?.FormatType;
/// <inheritdoc cref="Models.LinearExecutable.DebugInformation.DebuggerData"/>
public byte[] DebuggerData => _executable.DebugInformation?.DebuggerData;
public byte[] DebuggerData => _model.DebugInformation?.DebuggerData;
#endregion
@@ -290,23 +290,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the executable
/// </summary>
private SabreTools.Models.LinearExecutable.Executable _executable;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private LinearExecutable() { }
/// <inheritdoc/>
#if NET48
public LinearExecutable(SabreTools.Models.LinearExecutable.Executable model, byte[] data, int offset)
#else
public LinearExecutable(SabreTools.Models.LinearExecutable.Executable? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <summary>
/// <inheritdoc/>
#if NET48
public LinearExecutable(SabreTools.Models.LinearExecutable.Executable model, Stream data)
#else
public LinearExecutable(SabreTools.Models.LinearExecutable.Executable? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}/// <summary>
/// Create an LE/LX executable from a byte array and offset
/// </summary>
/// <param name="data">Byte array representing the executable</param>
@@ -342,13 +348,14 @@ namespace BinaryObjectScanner.Wrappers
if (executable == null)
return null;
var wrapper = new LinearExecutable
try
{
_executable = executable,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new LinearExecutable(executable, data);
}
catch
{
return null;
}
}
#endregion
@@ -1007,7 +1014,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Debug Information:");
builder.AppendLine(" -------------------------");
if (_executable.DebugInformation == null)
if (_model.DebugInformation == null)
{
builder.AppendLine(" No debug information");
}
@@ -1023,7 +1030,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

View File

@@ -3,12 +3,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class MSDOS : WrapperBase
public class MSDOS : WrapperBase<SabreTools.Models.MSDOS.Executable>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "MS-DOS Executable";
public override string DescriptionString => "MS-DOS Executable";
#endregion
@@ -17,99 +17,105 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Magic"/>
public string Magic => _executable.Header.Magic;
public string Magic => _model.Header.Magic;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.LastPageBytes"/>
public ushort LastPageBytes => _executable.Header.LastPageBytes;
public ushort LastPageBytes => _model.Header.LastPageBytes;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Pages"/>
public ushort Pages => _executable.Header.Pages;
public ushort Pages => _model.Header.Pages;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.RelocationItems"/>
public ushort RelocationItems => _executable.Header.RelocationItems;
public ushort RelocationItems => _model.Header.RelocationItems;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.HeaderParagraphSize"/>
public ushort HeaderParagraphSize => _executable.Header.HeaderParagraphSize;
public ushort HeaderParagraphSize => _model.Header.HeaderParagraphSize;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.MinimumExtraParagraphs"/>
public ushort MinimumExtraParagraphs => _executable.Header.MinimumExtraParagraphs;
public ushort MinimumExtraParagraphs => _model.Header.MinimumExtraParagraphs;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.MaximumExtraParagraphs"/>
public ushort MaximumExtraParagraphs => _executable.Header.MaximumExtraParagraphs;
public ushort MaximumExtraParagraphs => _model.Header.MaximumExtraParagraphs;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialSSValue"/>
public ushort InitialSSValue => _executable.Header.InitialSSValue;
public ushort InitialSSValue => _model.Header.InitialSSValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialSPValue"/>
public ushort InitialSPValue => _executable.Header.InitialSPValue;
public ushort InitialSPValue => _model.Header.InitialSPValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Checksum"/>
public ushort Checksum => _executable.Header.Checksum;
public ushort Checksum => _model.Header.Checksum;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialIPValue"/>
public ushort InitialIPValue => _executable.Header.InitialIPValue;
public ushort InitialIPValue => _model.Header.InitialIPValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.InitialCSValue"/>
public ushort InitialCSValue => _executable.Header.InitialCSValue;
public ushort InitialCSValue => _model.Header.InitialCSValue;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.RelocationTableAddr"/>
public ushort RelocationTableAddr => _executable.Header.RelocationTableAddr;
public ushort RelocationTableAddr => _model.Header.RelocationTableAddr;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.OverlayNumber"/>
public ushort OverlayNumber => _executable.Header.OverlayNumber;
public ushort OverlayNumber => _model.Header.OverlayNumber;
#endregion
#region PE Extensions
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Reserved1"/>
public ushort[] Reserved1 => _executable.Header.Reserved1;
public ushort[] Reserved1 => _model.Header.Reserved1;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.OEMIdentifier"/>
public ushort OEMIdentifier => _executable.Header.OEMIdentifier;
public ushort OEMIdentifier => _model.Header.OEMIdentifier;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.OEMInformation"/>
public ushort OEMInformation => _executable.Header.OEMInformation;
public ushort OEMInformation => _model.Header.OEMInformation;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.Reserved2"/>
public ushort[] Reserved2 => _executable.Header.Reserved2;
public ushort[] Reserved2 => _model.Header.Reserved2;
/// <inheritdoc cref="Models.MSDOS.ExecutableHeader.NewExeHeaderAddr"/>
public uint NewExeHeaderAddr => _executable.Header.NewExeHeaderAddr;
public uint NewExeHeaderAddr => _model.Header.NewExeHeaderAddr;
#endregion
#region Relocation Table
/// <inheritdoc cref="Models.MSDOS.Executable.RelocationTable"/>
public SabreTools.Models.MSDOS.RelocationEntry[] RelocationTable => _executable.RelocationTable;
public SabreTools.Models.MSDOS.RelocationEntry[] RelocationTable => _model.RelocationTable;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the executable
/// </summary>
private SabreTools.Models.MSDOS.Executable _executable;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private MSDOS() { }
/// <inheritdoc/>
#if NET48
public MSDOS(SabreTools.Models.MSDOS.Executable model, byte[] data, int offset)
#else
public MSDOS(SabreTools.Models.MSDOS.Executable? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an MS-DOS executable from a byte array and offset
/// </summary>
/// <param name="data">Byte array representing the executable</param>
/// <param name="offset">Offset within the array to parse</param>
/// <returns>An MS-DOS executable wrapper on success, null on failure</returns>
/// <inheritdoc/>
#if NET48
public MSDOS(SabreTools.Models.MSDOS.Executable model, Stream data)
#else
public MSDOS(SabreTools.Models.MSDOS.Executable? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}/// <summary>
/// Create an MS-DOS executable from a byte array and offset
/// </summary>
/// <param name="data">Byte array representing the executable</param>
/// <param name="offset">Offset within the array to parse</param>
/// <returns>An MS-DOS executable wrapper on success, null on failure</returns>
public static MSDOS Create(byte[] data, int offset)
{
// If the data is invalid
@@ -140,19 +146,20 @@ namespace BinaryObjectScanner.Wrappers
if (executable == null)
return null;
var wrapper = new MSDOS
try
{
_executable = executable,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new MSDOS(executable, data);
}
catch
{
return null;
}
}
#endregion
#region Printing
/// <inheritdoc/>
public override StringBuilder PrettyPrint()
{
@@ -220,7 +227,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

View File

@@ -5,12 +5,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public partial class MicrosoftCabinet : WrapperBase
public partial class MicrosoftCabinet : WrapperBase<SabreTools.Models.MicrosoftCabinet.Cabinet>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Microsoft Cabinet";
public override string DescriptionString => "Microsoft Cabinet";
#endregion
@@ -19,103 +19,109 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.Signature"/>
public string Signature => _cabinet.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.Reserved1"/>
public uint Reserved1 => _cabinet.Header.Reserved1;
public uint Reserved1 => _model.Header.Reserved1;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.CabinetSize"/>
public uint CabinetSize => _cabinet.Header.CabinetSize;
public uint CabinetSize => _model.Header.CabinetSize;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.Reserved2"/>
public uint Reserved2 => _cabinet.Header.Reserved2;
public uint Reserved2 => _model.Header.Reserved2;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.FilesOffset"/>
public uint FilesOffset => _cabinet.Header.FilesOffset;
public uint FilesOffset => _model.Header.FilesOffset;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.Reserved3"/>
public uint Reserved3 => _cabinet.Header.Reserved3;
public uint Reserved3 => _model.Header.Reserved3;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.VersionMinor"/>
public byte VersionMinor => _cabinet.Header.VersionMinor;
public byte VersionMinor => _model.Header.VersionMinor;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.VersionMajor"/>
public byte VersionMajor => _cabinet.Header.VersionMajor;
public byte VersionMajor => _model.Header.VersionMajor;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.FolderCount"/>
public ushort FolderCount => _cabinet.Header.FolderCount;
public ushort FolderCount => _model.Header.FolderCount;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.FileCount"/>
public ushort FileCount => _cabinet.Header.FileCount;
public ushort FileCount => _model.Header.FileCount;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.FileCount"/>
public SabreTools.Models.MicrosoftCabinet.HeaderFlags Flags => _cabinet.Header.Flags;
public SabreTools.Models.MicrosoftCabinet.HeaderFlags Flags => _model.Header.Flags;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.SetID"/>
public ushort SetID => _cabinet.Header.SetID;
public ushort SetID => _model.Header.SetID;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.CabinetIndex"/>
public ushort CabinetIndex => _cabinet.Header.CabinetIndex;
public ushort CabinetIndex => _model.Header.CabinetIndex;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.HeaderReservedSize"/>
public ushort HeaderReservedSize => _cabinet.Header.HeaderReservedSize;
public ushort HeaderReservedSize => _model.Header.HeaderReservedSize;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.FolderReservedSize"/>
public byte FolderReservedSize => _cabinet.Header.FolderReservedSize;
public byte FolderReservedSize => _model.Header.FolderReservedSize;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.DataReservedSize"/>
public byte DataReservedSize => _cabinet.Header.DataReservedSize;
public byte DataReservedSize => _model.Header.DataReservedSize;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.ReservedData"/>
public byte[] ReservedData => _cabinet.Header.ReservedData;
public byte[] ReservedData => _model.Header.ReservedData;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.CabinetPrev"/>
public string CabinetPrev => _cabinet.Header.CabinetPrev;
public string CabinetPrev => _model.Header.CabinetPrev;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.DiskPrev"/>
public string DiskPrev => _cabinet.Header.DiskPrev;
public string DiskPrev => _model.Header.DiskPrev;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.CabinetNext"/>
public string CabinetNext => _cabinet.Header.CabinetNext;
public string CabinetNext => _model.Header.CabinetNext;
/// <inheritdoc cref="Models.MicrosoftCabinet.CFHEADER.DiskNext"/>
public string DiskNext => _cabinet.Header.DiskNext;
public string DiskNext => _model.Header.DiskNext;
#endregion
#region Folders
/// <inheritdoc cref="Models.MicrosoftCabinet.Cabinet.Folders"/>
public SabreTools.Models.MicrosoftCabinet.CFFOLDER[] Folders => _cabinet.Folders;
public SabreTools.Models.MicrosoftCabinet.CFFOLDER[] Folders => _model.Folders;
#endregion
#region Files
/// <inheritdoc cref="Models.MicrosoftCabinet.Cabinet.Files"/>
public SabreTools.Models.MicrosoftCabinet.CFFILE[] Files => _cabinet.Files;
public SabreTools.Models.MicrosoftCabinet.CFFILE[] Files => _model.Files;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the cabinet
/// </summary>
private SabreTools.Models.MicrosoftCabinet.Cabinet _cabinet;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private MicrosoftCabinet() { }
/// <inheritdoc/>
#if NET48
public MicrosoftCabinet(SabreTools.Models.MicrosoftCabinet.Cabinet model, byte[] data, int offset)
#else
public MicrosoftCabinet(SabreTools.Models.MicrosoftCabinet.Cabinet? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <summary>
/// <inheritdoc/>
#if NET48
public MicrosoftCabinet(SabreTools.Models.MicrosoftCabinet.Cabinet model, Stream data)
#else
public MicrosoftCabinet(SabreTools.Models.MicrosoftCabinet.Cabinet? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}/// <summary>
/// Create a Microsoft Cabinet from a byte array and offset
/// </summary>
/// <param name="data">Byte array representing the cabinet</param>
@@ -151,13 +157,14 @@ namespace BinaryObjectScanner.Wrappers
if (cabinet == null)
return null;
var wrapper = new MicrosoftCabinet
try
{
_cabinet = cabinet,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new MicrosoftCabinet(cabinet, data);
}
catch
{
return null;
}
}
#endregion
@@ -557,7 +564,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_cabinet, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class N3DS : WrapperBase
public class N3DS : WrapperBase<SabreTools.Models.N3DS.Cart>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Nintendo 3DS Cart Image";
public override string DescriptionString => "Nintendo 3DS Cart Image";
#endregion
@@ -20,66 +20,66 @@ namespace BinaryObjectScanner.Wrappers
#region Common to all NCSD files
/// <inheritdoc cref="Models.N3DS.NCSDHeader.RSA2048Signature"/>
public byte[] RSA2048Signature => _cart.Header.RSA2048Signature;
public byte[] RSA2048Signature => _model.Header.RSA2048Signature;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.MagicNumber"/>
public string MagicNumber => _cart.Header.MagicNumber;
public string MagicNumber => _model.Header.MagicNumber;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.ImageSizeInMediaUnits"/>
public uint ImageSizeInMediaUnits => _cart.Header.ImageSizeInMediaUnits;
public uint ImageSizeInMediaUnits => _model.Header.ImageSizeInMediaUnits;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.MediaId"/>
public byte[] MediaId => _cart.Header.MediaId;
public byte[] MediaId => _model.Header.MediaId;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.PartitionsFSType"/>
public SabreTools.Models.N3DS.FilesystemType PartitionsFSType => _cart.Header.PartitionsFSType;
public SabreTools.Models.N3DS.FilesystemType PartitionsFSType => _model.Header.PartitionsFSType;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.PartitionsCryptType"/>
public byte[] PartitionsCryptType => _cart.Header.PartitionsCryptType;
public byte[] PartitionsCryptType => _model.Header.PartitionsCryptType;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.PartitionsTable"/>
public SabreTools.Models.N3DS.PartitionTableEntry[] PartitionsTable => _cart.Header.PartitionsTable;
public SabreTools.Models.N3DS.PartitionTableEntry[] PartitionsTable => _model.Header.PartitionsTable;
#endregion
#region CTR Cart Image (CCI) Specific
/// <inheritdoc cref="Models.N3DS.NCSDHeader.ExheaderHash"/>
public byte[] ExheaderHash => _cart.Header.ExheaderHash;
public byte[] ExheaderHash => _model.Header.ExheaderHash;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.AdditionalHeaderSize"/>
public uint AdditionalHeaderSize => _cart.Header.AdditionalHeaderSize;
public uint AdditionalHeaderSize => _model.Header.AdditionalHeaderSize;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.SectorZeroOffset"/>
public uint SectorZeroOffset => _cart.Header.SectorZeroOffset;
public uint SectorZeroOffset => _model.Header.SectorZeroOffset;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.PartitionFlags"/>
public byte[] PartitionFlags => _cart.Header.PartitionFlags;
public byte[] PartitionFlags => _model.Header.PartitionFlags;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.PartitionIdTable"/>
public ulong[] PartitionIdTable => _cart.Header.PartitionIdTable;
public ulong[] PartitionIdTable => _model.Header.PartitionIdTable;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.Reserved1"/>
public byte[] Reserved1 => _cart.Header.Reserved1;
public byte[] Reserved1 => _model.Header.Reserved1;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.Reserved2"/>
public byte[] Reserved2 => _cart.Header.Reserved2;
public byte[] Reserved2 => _model.Header.Reserved2;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.FirmUpdateByte1"/>
public byte FirmUpdateByte1 => _cart.Header.FirmUpdateByte1;
public byte FirmUpdateByte1 => _model.Header.FirmUpdateByte1;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.FirmUpdateByte2"/>
public byte FirmUpdateByte2 => _cart.Header.FirmUpdateByte2;
public byte FirmUpdateByte2 => _model.Header.FirmUpdateByte2;
#endregion
#region Raw NAND Format Specific
/// <inheritdoc cref="Models.N3DS.NCSDHeader.Unknown"/>
public byte[] Unknown => _cart.Header.Unknown;
public byte[] Unknown => _model.Header.Unknown;
/// <inheritdoc cref="Models.N3DS.NCSDHeader.EncryptedMBR"/>
public byte[] EncryptedMBR => _cart.Header.EncryptedMBR;
public byte[] EncryptedMBR => _model.Header.EncryptedMBR;
#endregion
@@ -88,37 +88,37 @@ namespace BinaryObjectScanner.Wrappers
#region Card Info Header
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.WritableAddressMediaUnits"/>
public uint CIH_WritableAddressMediaUnits => _cart.CardInfoHeader.WritableAddressMediaUnits;
public uint CIH_WritableAddressMediaUnits => _model.CardInfoHeader.WritableAddressMediaUnits;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.CardInfoBitmask"/>
public uint CIH_CardInfoBitmask => _cart.CardInfoHeader.CardInfoBitmask;
public uint CIH_CardInfoBitmask => _model.CardInfoHeader.CardInfoBitmask;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.Reserved1"/>
public byte[] CIH_Reserved1 => _cart.CardInfoHeader.Reserved1;
public byte[] CIH_Reserved1 => _model.CardInfoHeader.Reserved1;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.FilledSize"/>
public uint CIH_FilledSize => _cart.CardInfoHeader.FilledSize;
public uint CIH_FilledSize => _model.CardInfoHeader.FilledSize;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.Reserved2"/>
public byte[] CIH_Reserved2 => _cart.CardInfoHeader.Reserved2;
public byte[] CIH_Reserved2 => _model.CardInfoHeader.Reserved2;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.TitleVersion"/>
public ushort CIH_TitleVersion => _cart.CardInfoHeader.TitleVersion;
public ushort CIH_TitleVersion => _model.CardInfoHeader.TitleVersion;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.CardRevision"/>
public ushort CIH_CardRevision => _cart.CardInfoHeader.CardRevision;
public ushort CIH_CardRevision => _model.CardInfoHeader.CardRevision;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.Reserved3"/>
public byte[] CIH_Reserved3 => _cart.CardInfoHeader.Reserved3;
public byte[] CIH_Reserved3 => _model.CardInfoHeader.Reserved3;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.CVerTitleID"/>
public byte[] CIH_CVerTitleID => _cart.CardInfoHeader.CVerTitleID;
public byte[] CIH_CVerTitleID => _model.CardInfoHeader.CVerTitleID;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.CVerVersionNumber"/>
public ushort CIH_CVerVersionNumber => _cart.CardInfoHeader.CVerVersionNumber;
public ushort CIH_CVerVersionNumber => _model.CardInfoHeader.CVerVersionNumber;
/// <inheritdoc cref="Models.N3DS.CardInfoHeader.Reserved4"/>
public byte[] CIH_Reserved4 => _cart.CardInfoHeader.Reserved4;
public byte[] CIH_Reserved4 => _model.CardInfoHeader.Reserved4;
#endregion
@@ -127,65 +127,65 @@ namespace BinaryObjectScanner.Wrappers
#region Initial Data
/// <inheritdoc cref="Models.N3DS.InitialData.CardSeedKeyY"/>
public byte[] DCIH_ID_CardSeedKeyY => _cart.DevelopmentCardInfoHeader?.InitialData?.CardSeedKeyY;
public byte[] DCIH_ID_CardSeedKeyY => _model.DevelopmentCardInfoHeader?.InitialData?.CardSeedKeyY;
/// <inheritdoc cref="Models.N3DS.InitialData.EncryptedCardSeed"/>
public byte[] DCIH_ID_EncryptedCardSeed => _cart.DevelopmentCardInfoHeader?.InitialData?.EncryptedCardSeed;
public byte[] DCIH_ID_EncryptedCardSeed => _model.DevelopmentCardInfoHeader?.InitialData?.EncryptedCardSeed;
/// <inheritdoc cref="Models.N3DS.InitialData.CardSeedAESMAC"/>
public byte[] DCIH_ID_CardSeedAESMAC => _cart.DevelopmentCardInfoHeader?.InitialData?.CardSeedAESMAC;
public byte[] DCIH_ID_CardSeedAESMAC => _model.DevelopmentCardInfoHeader?.InitialData?.CardSeedAESMAC;
/// <inheritdoc cref="Models.N3DS.InitialData.CardSeedNonce"/>
public byte[] DCIH_ID_CardSeedNonce => _cart.DevelopmentCardInfoHeader?.InitialData?.CardSeedNonce;
public byte[] DCIH_ID_CardSeedNonce => _model.DevelopmentCardInfoHeader?.InitialData?.CardSeedNonce;
/// <inheritdoc cref="Models.N3DS.InitialData.Reserved3"/>
public byte[] DCIH_ID_Reserved => _cart.DevelopmentCardInfoHeader?.InitialData?.Reserved;
public byte[] DCIH_ID_Reserved => _model.DevelopmentCardInfoHeader?.InitialData?.Reserved;
/// <inheritdoc cref="Models.N3DS.InitialData.BackupHeader"/>
public SabreTools.Models.N3DS.NCCHHeader DCIH_ID_BackupHeader => _cart.DevelopmentCardInfoHeader?.InitialData?.BackupHeader;
public SabreTools.Models.N3DS.NCCHHeader DCIH_ID_BackupHeader => _model.DevelopmentCardInfoHeader?.InitialData?.BackupHeader;
#endregion
/// <inheritdoc cref="Models.N3DS.DevelopmentCardInfoHeader.CardDeviceReserved1"/>
public byte[] DCIH_CardDeviceReserved1 => _cart.DevelopmentCardInfoHeader?.CardDeviceReserved1;
public byte[] DCIH_CardDeviceReserved1 => _model.DevelopmentCardInfoHeader?.CardDeviceReserved1;
/// <inheritdoc cref="Models.N3DS.DevelopmentCardInfoHeader.TitleKey"/>
public byte[] DCIH_TitleKey => _cart.DevelopmentCardInfoHeader?.TitleKey;
public byte[] DCIH_TitleKey => _model.DevelopmentCardInfoHeader?.TitleKey;
/// <inheritdoc cref="Models.N3DS.DevelopmentCardInfoHeader.CardDeviceReserved2"/>
public byte[] DCIH_CardDeviceReserved2 => _cart.DevelopmentCardInfoHeader?.CardDeviceReserved2;
public byte[] DCIH_CardDeviceReserved2 => _model.DevelopmentCardInfoHeader?.CardDeviceReserved2;
#region Test Data
/// <inheritdoc cref="Models.N3DS.TestData.Signature"/>
public byte[] DCIH_TD_Signature => _cart.DevelopmentCardInfoHeader?.TestData?.Signature;
public byte[] DCIH_TD_Signature => _model.DevelopmentCardInfoHeader?.TestData?.Signature;
/// <inheritdoc cref="Models.N3DS.TestData.AscendingByteSequence"/>
public byte[] DCIH_TD_AscendingByteSequence => _cart.DevelopmentCardInfoHeader?.TestData?.AscendingByteSequence;
public byte[] DCIH_TD_AscendingByteSequence => _model.DevelopmentCardInfoHeader?.TestData?.AscendingByteSequence;
/// <inheritdoc cref="Models.N3DS.TestData.DescendingByteSequence"/>
public byte[] DCIH_TD_DescendingByteSequence => _cart.DevelopmentCardInfoHeader?.TestData?.DescendingByteSequence;
public byte[] DCIH_TD_DescendingByteSequence => _model.DevelopmentCardInfoHeader?.TestData?.DescendingByteSequence;
/// <inheritdoc cref="Models.N3DS.TestData.Filled00"/>
public byte[] DCIH_TD_Filled00 => _cart.DevelopmentCardInfoHeader?.TestData?.Filled00;
public byte[] DCIH_TD_Filled00 => _model.DevelopmentCardInfoHeader?.TestData?.Filled00;
/// <inheritdoc cref="Models.N3DS.TestData.FilledFF"/>
public byte[] DCIH_TD_FilledFF => _cart.DevelopmentCardInfoHeader?.TestData?.FilledFF;
public byte[] DCIH_TD_FilledFF => _model.DevelopmentCardInfoHeader?.TestData?.FilledFF;
/// <inheritdoc cref="Models.N3DS.TestData.Filled0F"/>
public byte[] DCIH_TD_Filled0F => _cart.DevelopmentCardInfoHeader?.TestData?.Filled0F;
public byte[] DCIH_TD_Filled0F => _model.DevelopmentCardInfoHeader?.TestData?.Filled0F;
/// <inheritdoc cref="Models.N3DS.TestData.FilledF0"/>
public byte[] DCIH_TD_FilledF0 => _cart.DevelopmentCardInfoHeader?.TestData?.FilledF0;
public byte[] DCIH_TD_FilledF0 => _model.DevelopmentCardInfoHeader?.TestData?.FilledF0;
/// <inheritdoc cref="Models.N3DS.TestData.Filled55"/>
public byte[] DCIH_TD_Filled55 => _cart.DevelopmentCardInfoHeader?.TestData?.Filled55;
public byte[] DCIH_TD_Filled55 => _model.DevelopmentCardInfoHeader?.TestData?.Filled55;
/// <inheritdoc cref="Models.N3DS.TestData.FilledAA"/>
public byte[] DCIH_TD_FilledAA => _cart.DevelopmentCardInfoHeader?.TestData?.FilledAA;
public byte[] DCIH_TD_FilledAA => _model.DevelopmentCardInfoHeader?.TestData?.FilledAA;
/// <inheritdoc cref="Models.N3DS.TestData.FinalByte"/>
public byte? DCIH_TD_FinalByte => _cart.DevelopmentCardInfoHeader?.TestData?.FinalByte;
public byte? DCIH_TD_FinalByte => _model.DevelopmentCardInfoHeader?.TestData?.FinalByte;
#endregion
@@ -194,48 +194,56 @@ namespace BinaryObjectScanner.Wrappers
#region Partitions
/// <inheritdoc cref="Models.N3DS.Cart.Partitions"/>
public SabreTools.Models.N3DS.NCCHHeader[] Partitions => _cart.Partitions;
public SabreTools.Models.N3DS.NCCHHeader[] Partitions => _model.Partitions;
#endregion
#region Extended Headers
/// <inheritdoc cref="Models.N3DS.Cart.ExtendedHeaders"/>
public SabreTools.Models.N3DS.NCCHExtendedHeader[] ExtendedHeaders => _cart.ExtendedHeaders;
public SabreTools.Models.N3DS.NCCHExtendedHeader[] ExtendedHeaders => _model.ExtendedHeaders;
#endregion
#region ExeFS Headers
/// <inheritdoc cref="Models.N3DS.Cart.ExeFSHeaders"/>
public SabreTools.Models.N3DS.ExeFSHeader[] ExeFSHeaders => _cart.ExeFSHeaders;
public SabreTools.Models.N3DS.ExeFSHeader[] ExeFSHeaders => _model.ExeFSHeaders;
#endregion
#region RomFS Headers
/// <inheritdoc cref="Models.N3DS.Cart.RomFSHeaders"/>
public SabreTools.Models.N3DS.RomFSHeader[] RomFSHeaders => _cart.RomFSHeaders;
public SabreTools.Models.N3DS.RomFSHeader[] RomFSHeaders => _model.RomFSHeaders;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the cart
/// </summary>
private SabreTools.Models.N3DS.Cart _cart;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private N3DS() { }
/// <inheritdoc/>
#if NET48
public N3DS(SabreTools.Models.N3DS.Cart model, byte[] data, int offset)
#else
public N3DS(SabreTools.Models.N3DS.Cart? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public N3DS(SabreTools.Models.N3DS.Cart model, Stream data)
#else
public N3DS(SabreTools.Models.N3DS.Cart? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a 3DS cart image from a byte array and offset
@@ -273,13 +281,14 @@ namespace BinaryObjectScanner.Wrappers
if (archive == null)
return null;
var wrapper = new N3DS
try
{
_cart = archive,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new N3DS(archive, data);
}
catch
{
return null;
}
}
#endregion
@@ -396,7 +405,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Development Card Info Header Information:");
builder.AppendLine(" -------------------------");
if (_cart.DevelopmentCardInfoHeader == null)
if (_model.DevelopmentCardInfoHeader == null)
{
builder.AppendLine(" No development card info header");
}
@@ -762,7 +771,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_cart, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -3,12 +3,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class NCF : WrapperBase
public class NCF : WrapperBase<SabreTools.Models.NCF.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Half-Life No Cache File (NCF)";
public override string DescriptionString => "Half-Life No Cache File (NCF)";
#endregion
@@ -17,202 +17,210 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.NCF.Header.Dummy0"/>
public uint Dummy0 => _file.Header.Dummy0;
public uint Dummy0 => _model.Header.Dummy0;
/// <inheritdoc cref="Models.NCF.Header.MajorVersion"/>
public uint MajorVersion => _file.Header.MajorVersion;
public uint MajorVersion => _model.Header.MajorVersion;
/// <inheritdoc cref="Models.NCF.Header.MinorVersion"/>
public uint MinorVersion => _file.Header.MinorVersion;
public uint MinorVersion => _model.Header.MinorVersion;
/// <inheritdoc cref="Models.NCF.Header.CacheID"/>
public uint CacheID => _file.Header.CacheID;
public uint CacheID => _model.Header.CacheID;
/// <inheritdoc cref="Models.NCF.Header.LastVersionPlayed"/>
public uint LastVersionPlayed => _file.Header.LastVersionPlayed;
public uint LastVersionPlayed => _model.Header.LastVersionPlayed;
/// <inheritdoc cref="Models.NCF.Header.Dummy1"/>
public uint Dummy1 => _file.Header.Dummy1;
public uint Dummy1 => _model.Header.Dummy1;
/// <inheritdoc cref="Models.NCF.Header.Dummy2"/>
public uint Dummy2 => _file.Header.Dummy2;
public uint Dummy2 => _model.Header.Dummy2;
/// <inheritdoc cref="Models.NCF.Header.FileSize"/>
public uint FileSize => _file.Header.FileSize;
public uint FileSize => _model.Header.FileSize;
/// <inheritdoc cref="Models.NCF.Header.BlockSize"/>
public uint BlockSize => _file.Header.BlockSize;
public uint BlockSize => _model.Header.BlockSize;
/// <inheritdoc cref="Models.NCF.Header.BlockCount"/>
public uint BlockCount => _file.Header.BlockCount;
public uint BlockCount => _model.Header.BlockCount;
/// <inheritdoc cref="Models.NCF.Header.Dummy3"/>
public uint Dummy3 => _file.Header.Dummy3;
public uint Dummy3 => _model.Header.Dummy3;
#endregion
#region Directory Header
/// <inheritdoc cref="Models.NCF.DirectoryHeader.Dummy0"/>
public uint DH_Dummy0 => _file.DirectoryHeader.Dummy0;
public uint DH_Dummy0 => _model.DirectoryHeader.Dummy0;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.CacheID"/>
public uint DH_CacheID => _file.DirectoryHeader.CacheID;
public uint DH_CacheID => _model.DirectoryHeader.CacheID;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.LastVersionPlayed"/>
public uint DH_LastVersionPlayed => _file.DirectoryHeader.LastVersionPlayed;
public uint DH_LastVersionPlayed => _model.DirectoryHeader.LastVersionPlayed;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.ItemCount"/>
public uint DH_ItemCount => _file.DirectoryHeader.ItemCount;
public uint DH_ItemCount => _model.DirectoryHeader.ItemCount;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.FileCount"/>
public uint DH_FileCount => _file.DirectoryHeader.FileCount;
public uint DH_FileCount => _model.DirectoryHeader.FileCount;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.ChecksumDataLength"/>
public uint DH_ChecksumDataLength => _file.DirectoryHeader.ChecksumDataLength;
public uint DH_ChecksumDataLength => _model.DirectoryHeader.ChecksumDataLength;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.DirectorySize"/>
public uint DH_DirectorySize => _file.DirectoryHeader.DirectorySize;
public uint DH_DirectorySize => _model.DirectoryHeader.DirectorySize;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.NameSize"/>
public uint DH_NameSize => _file.DirectoryHeader.NameSize;
public uint DH_NameSize => _model.DirectoryHeader.NameSize;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.Info1Count"/>
public uint DH_Info1Count => _file.DirectoryHeader.Info1Count;
public uint DH_Info1Count => _model.DirectoryHeader.Info1Count;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.CopyCount"/>
public uint DH_CopyCount => _file.DirectoryHeader.CopyCount;
public uint DH_CopyCount => _model.DirectoryHeader.CopyCount;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.LocalCount"/>
public uint DH_LocalCount => _file.DirectoryHeader.LocalCount;
public uint DH_LocalCount => _model.DirectoryHeader.LocalCount;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.Dummy1"/>
public uint DH_Dummy1 => _file.DirectoryHeader.Dummy1;
public uint DH_Dummy1 => _model.DirectoryHeader.Dummy1;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.Dummy2"/>
public uint DH_Dummy2 => _file.DirectoryHeader.Dummy2;
public uint DH_Dummy2 => _model.DirectoryHeader.Dummy2;
/// <inheritdoc cref="Models.NCF.DirectoryHeader.Checksum"/>
public uint DH_Checksum => _file.DirectoryHeader.Checksum;
public uint DH_Checksum => _model.DirectoryHeader.Checksum;
#endregion
#region Directory Entries
/// <inheritdoc cref="Models.NCF.File.DirectoryEntries"/>
public SabreTools.Models.NCF.DirectoryEntry[] DirectoryEntries => _file.DirectoryEntries;
public SabreTools.Models.NCF.DirectoryEntry[] DirectoryEntries => _model.DirectoryEntries;
#endregion
#region Directory Names
/// <inheritdoc cref="Models.NCF.File.DirectoryNames"/>
public System.Collections.Generic.Dictionary<long, string> DirectoryNames => _file.DirectoryNames;
public System.Collections.Generic.Dictionary<long, string> DirectoryNames => _model.DirectoryNames;
#endregion
#region Directory Info 1 Entries
/// <inheritdoc cref="Models.NCF.File.DirectoryInfo1Entries"/>
public SabreTools.Models.NCF.DirectoryInfo1Entry[] DirectoryInfo1Entries => _file.DirectoryInfo1Entries;
public SabreTools.Models.NCF.DirectoryInfo1Entry[] DirectoryInfo1Entries => _model.DirectoryInfo1Entries;
#endregion
#region Directory Info 2 Entries
/// <inheritdoc cref="Models.NCF.File.DirectoryInfo2Entries"/>
public SabreTools.Models.NCF.DirectoryInfo2Entry[] DirectoryInfo2Entries => _file.DirectoryInfo2Entries;
public SabreTools.Models.NCF.DirectoryInfo2Entry[] DirectoryInfo2Entries => _model.DirectoryInfo2Entries;
#endregion
#region Directory Copy Entries
/// <inheritdoc cref="Models.NCF.File.DirectoryCopyEntries"/>
public SabreTools.Models.NCF.DirectoryCopyEntry[] DirectoryCopyEntries => _file.DirectoryCopyEntries;
public SabreTools.Models.NCF.DirectoryCopyEntry[] DirectoryCopyEntries => _model.DirectoryCopyEntries;
#endregion
#region Directory Local Entries
/// <inheritdoc cref="Models.NCF.File.DirectoryLocalEntries"/>
public SabreTools.Models.NCF.DirectoryLocalEntry[] DirectoryLocalEntries => _file.DirectoryLocalEntries;
public SabreTools.Models.NCF.DirectoryLocalEntry[] DirectoryLocalEntries => _model.DirectoryLocalEntries;
#endregion
#region Unknown Header
/// <inheritdoc cref="Models.NCF.UnknownHeader.Dummy0"/>
public uint UH_Dummy0 => _file.UnknownHeader.Dummy0;
public uint UH_Dummy0 => _model.UnknownHeader.Dummy0;
/// <inheritdoc cref="Models.NCF.UnknownHeader.Dummy1"/>
public uint UH_Dummy1 => _file.UnknownHeader.Dummy1;
public uint UH_Dummy1 => _model.UnknownHeader.Dummy1;
#endregion
#region Unknown Entries
/// <inheritdoc cref="Models.NCF.File.UnknownEntries"/>
public SabreTools.Models.NCF.UnknownEntry[] UnknownEntries => _file.UnknownEntries;
public SabreTools.Models.NCF.UnknownEntry[] UnknownEntries => _model.UnknownEntries;
#endregion
#region Checksum Header
/// <inheritdoc cref="Models.NCF.ChecksumHeader.Dummy0"/>
public uint CH_Dummy0 => _file.ChecksumHeader.Dummy0;
public uint CH_Dummy0 => _model.ChecksumHeader.Dummy0;
/// <inheritdoc cref="Models.NCF.ChecksumHeader.ChecksumSize"/>
public uint CH_ChecksumSize => _file.ChecksumHeader.ChecksumSize;
public uint CH_ChecksumSize => _model.ChecksumHeader.ChecksumSize;
#endregion
#region Checksum Map Header
/// <inheritdoc cref="Models.NCF.ChecksumMapHeader.Dummy0"/>
public uint CMH_Dummy0 => _file.ChecksumMapHeader.Dummy0;
public uint CMH_Dummy0 => _model.ChecksumMapHeader.Dummy0;
/// <inheritdoc cref="Models.NCF.ChecksumMapHeader.Dummy1"/>
public uint CMH_Dummy1 => _file.ChecksumMapHeader.Dummy1;
public uint CMH_Dummy1 => _model.ChecksumMapHeader.Dummy1;
/// <inheritdoc cref="Models.NCF.ChecksumMapHeader.ItemCount"/>
public uint CMH_ItemCount => _file.ChecksumMapHeader.ItemCount;
public uint CMH_ItemCount => _model.ChecksumMapHeader.ItemCount;
/// <inheritdoc cref="Models.NCF.ChecksumMapHeader.ChecksumCount"/>
public uint CMH_ChecksumCount => _file.ChecksumMapHeader.ChecksumCount;
public uint CMH_ChecksumCount => _model.ChecksumMapHeader.ChecksumCount;
#endregion
#region Checksum Map Entries
/// <inheritdoc cref="Models.NCF.File.ChecksumMapEntries"/>
public SabreTools.Models.NCF.ChecksumMapEntry[] ChecksumMapEntries => _file.ChecksumMapEntries;
public SabreTools.Models.NCF.ChecksumMapEntry[] ChecksumMapEntries => _model.ChecksumMapEntries;
#endregion
#region Checksum Entries
/// <inheritdoc cref="Models.NCF.File.ChecksumEntries"/>
public SabreTools.Models.NCF.ChecksumEntry[] ChecksumEntries => _file.ChecksumEntries;
public SabreTools.Models.NCF.ChecksumEntry[] ChecksumEntries => _model.ChecksumEntries;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the NCF
/// </summary>
private SabreTools.Models.NCF.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private NCF() { }
/// <inheritdoc/>
#if NET48
public NCF(SabreTools.Models.NCF.File model, byte[] data, int offset)
#else
public NCF(SabreTools.Models.NCF.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public NCF(SabreTools.Models.NCF.File model, Stream data)
#else
public NCF(SabreTools.Models.NCF.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an NCF from a byte array and offset
@@ -250,13 +258,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new NCF
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new NCF(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -586,7 +595,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

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

View File

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class Nitro : WrapperBase
public class Nitro : WrapperBase<SabreTools.Models.Nitro.Cart>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Nintendo DS/DSi Cart Image";
public override string DescriptionString => "Nintendo DS/DSi Cart Image";
#endregion
@@ -18,319 +18,327 @@ namespace BinaryObjectScanner.Wrappers
#region Common Header
/// <inheritdoc cref="Models.Nitro.CommonHeader.GameTitle"/>
public string GameTitle => _cart.CommonHeader.GameTitle;
public string GameTitle => _model.CommonHeader.GameTitle;
/// <inheritdoc cref="Models.Nitro.CommonHeader.GameCode"/>
public uint GameCode => _cart.CommonHeader.GameCode;
public uint GameCode => _model.CommonHeader.GameCode;
/// <inheritdoc cref="Models.Nitro.CommonHeader.MakerCode"/>
public string MakerCode => _cart.CommonHeader.MakerCode;
public string MakerCode => _model.CommonHeader.MakerCode;
/// <inheritdoc cref="Models.Nitro.CommonHeader.UnitCode"/>
public SabreTools.Models.Nitro.Unitcode UnitCode => _cart.CommonHeader.UnitCode;
public SabreTools.Models.Nitro.Unitcode UnitCode => _model.CommonHeader.UnitCode;
/// <inheritdoc cref="Models.Nitro.CommonHeader.EncryptionSeedSelect"/>
public byte EncryptionSeedSelect => _cart.CommonHeader.EncryptionSeedSelect;
public byte EncryptionSeedSelect => _model.CommonHeader.EncryptionSeedSelect;
/// <inheritdoc cref="Models.Nitro.CommonHeader.DeviceCapacity"/>
public byte DeviceCapacity => _cart.CommonHeader.DeviceCapacity;
public byte DeviceCapacity => _model.CommonHeader.DeviceCapacity;
/// <inheritdoc cref="Models.Nitro.CommonHeader.Reserved1"/>
public byte[] Reserved1 => _cart.CommonHeader.Reserved1;
public byte[] Reserved1 => _model.CommonHeader.Reserved1;
/// <inheritdoc cref="Models.Nitro.CommonHeader.GameRevision"/>
public ushort GameRevision => _cart.CommonHeader.GameRevision;
public ushort GameRevision => _model.CommonHeader.GameRevision;
/// <inheritdoc cref="Models.Nitro.CommonHeader.RomVersion"/>
public byte RomVersion => _cart.CommonHeader.RomVersion;
public byte RomVersion => _model.CommonHeader.RomVersion;
/// <inheritdoc cref="Models.Nitro.CommonHeader.InternalFlags"/>
public byte InternalFlags => _cart.CommonHeader.InternalFlags;
public byte InternalFlags => _model.CommonHeader.InternalFlags;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9RomOffset"/>
public uint ARM9RomOffset => _cart.CommonHeader.ARM9RomOffset;
public uint ARM9RomOffset => _model.CommonHeader.ARM9RomOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9EntryAddress"/>
public uint ARM9EntryAddress => _cart.CommonHeader.ARM9EntryAddress;
public uint ARM9EntryAddress => _model.CommonHeader.ARM9EntryAddress;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9LoadAddress"/>
public uint ARM9LoadAddress => _cart.CommonHeader.ARM9LoadAddress;
public uint ARM9LoadAddress => _model.CommonHeader.ARM9LoadAddress;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9Size"/>
public uint ARM9Size => _cart.CommonHeader.ARM9Size;
public uint ARM9Size => _model.CommonHeader.ARM9Size;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7RomOffset"/>
public uint ARM7RomOffset => _cart.CommonHeader.ARM7RomOffset;
public uint ARM7RomOffset => _model.CommonHeader.ARM7RomOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7EntryAddress"/>
public uint ARM7EntryAddress => _cart.CommonHeader.ARM7EntryAddress;
public uint ARM7EntryAddress => _model.CommonHeader.ARM7EntryAddress;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7LoadAddress"/>
public uint ARM7LoadAddress => _cart.CommonHeader.ARM7LoadAddress;
public uint ARM7LoadAddress => _model.CommonHeader.ARM7LoadAddress;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7Size"/>
public uint ARM7Size => _cart.CommonHeader.ARM7Size;
public uint ARM7Size => _model.CommonHeader.ARM7Size;
/// <inheritdoc cref="Models.Nitro.CommonHeader.FileNameTableOffset"/>
public uint FileNameTableOffset => _cart.CommonHeader.FileNameTableOffset;
public uint FileNameTableOffset => _model.CommonHeader.FileNameTableOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.FileNameTableLength"/>
public uint FileNameTableLength => _cart.CommonHeader.FileNameTableLength;
public uint FileNameTableLength => _model.CommonHeader.FileNameTableLength;
/// <inheritdoc cref="Models.Nitro.CommonHeader.FileAllocationTableOffset"/>
public uint FileAllocationTableOffset => _cart.CommonHeader.FileAllocationTableOffset;
public uint FileAllocationTableOffset => _model.CommonHeader.FileAllocationTableOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.FileAllocationTableLength"/>
public uint FileAllocationTableLength => _cart.CommonHeader.FileAllocationTableLength;
public uint FileAllocationTableLength => _model.CommonHeader.FileAllocationTableLength;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9OverlayOffset"/>
public uint ARM9OverlayOffset => _cart.CommonHeader.ARM9OverlayOffset;
public uint ARM9OverlayOffset => _model.CommonHeader.ARM9OverlayOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9OverlayLength"/>
public uint ARM9OverlayLength => _cart.CommonHeader.ARM9OverlayLength;
public uint ARM9OverlayLength => _model.CommonHeader.ARM9OverlayLength;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7OverlayOffset"/>
public uint ARM7OverlayOffset => _cart.CommonHeader.ARM7OverlayOffset;
public uint ARM7OverlayOffset => _model.CommonHeader.ARM7OverlayOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7OverlayLength"/>
public uint ARM7OverlayLength => _cart.CommonHeader.ARM7OverlayLength;
public uint ARM7OverlayLength => _model.CommonHeader.ARM7OverlayLength;
/// <inheritdoc cref="Models.Nitro.CommonHeader.NormalCardControlRegisterSettings"/>
public uint NormalCardControlRegisterSettings => _cart.CommonHeader.NormalCardControlRegisterSettings;
public uint NormalCardControlRegisterSettings => _model.CommonHeader.NormalCardControlRegisterSettings;
/// <inheritdoc cref="Models.Nitro.CommonHeader.SecureCardControlRegisterSettings"/>
public uint SecureCardControlRegisterSettings => _cart.CommonHeader.SecureCardControlRegisterSettings;
public uint SecureCardControlRegisterSettings => _model.CommonHeader.SecureCardControlRegisterSettings;
/// <inheritdoc cref="Models.Nitro.CommonHeader.IconBannerOffset"/>
public uint IconBannerOffset => _cart.CommonHeader.IconBannerOffset;
public uint IconBannerOffset => _model.CommonHeader.IconBannerOffset;
/// <inheritdoc cref="Models.Nitro.CommonHeader.SecureAreaCRC"/>
public ushort SecureAreaCRC => _cart.CommonHeader.SecureAreaCRC;
public ushort SecureAreaCRC => _model.CommonHeader.SecureAreaCRC;
/// <inheritdoc cref="Models.Nitro.CommonHeader.SecureTransferTimeout"/>
public ushort SecureTransferTimeout => _cart.CommonHeader.SecureTransferTimeout;
public ushort SecureTransferTimeout => _model.CommonHeader.SecureTransferTimeout;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM9Autoload"/>
public uint ARM9Autoload => _cart.CommonHeader.ARM9Autoload;
public uint ARM9Autoload => _model.CommonHeader.ARM9Autoload;
/// <inheritdoc cref="Models.Nitro.CommonHeader.ARM7Autoload"/>
public uint ARM7Autoload => _cart.CommonHeader.ARM7Autoload;
public uint ARM7Autoload => _model.CommonHeader.ARM7Autoload;
/// <inheritdoc cref="Models.Nitro.CommonHeader.SecureDisable"/>
public byte[] SecureDisable => _cart.CommonHeader.SecureDisable;
public byte[] SecureDisable => _model.CommonHeader.SecureDisable;
/// <inheritdoc cref="Models.Nitro.CommonHeader.NTRRegionRomSize"/>
public uint NTRRegionRomSize => _cart.CommonHeader.NTRRegionRomSize;
public uint NTRRegionRomSize => _model.CommonHeader.NTRRegionRomSize;
/// <inheritdoc cref="Models.Nitro.CommonHeader.HeaderSize"/>
public uint HeaderSize => _cart.CommonHeader.HeaderSize;
public uint HeaderSize => _model.CommonHeader.HeaderSize;
/// <inheritdoc cref="Models.Nitro.CommonHeader.Reserved2"/>
public byte[] Reserved2 => _cart.CommonHeader.Reserved2;
public byte[] Reserved2 => _model.CommonHeader.Reserved2;
/// <inheritdoc cref="Models.Nitro.CommonHeader.NintendoLogo"/>
public byte[] NintendoLogo => _cart.CommonHeader.NintendoLogo;
public byte[] NintendoLogo => _model.CommonHeader.NintendoLogo;
/// <inheritdoc cref="Models.Nitro.CommonHeader.NintendoLogoCRC"/>
public ushort NintendoLogoCRC => _cart.CommonHeader.NintendoLogoCRC;
public ushort NintendoLogoCRC => _model.CommonHeader.NintendoLogoCRC;
/// <inheritdoc cref="Models.Nitro.CommonHeader.HeaderCRC"/>
public ushort HeaderCRC => _cart.CommonHeader.HeaderCRC;
public ushort HeaderCRC => _model.CommonHeader.HeaderCRC;
/// <inheritdoc cref="Models.Nitro.CommonHeader.DebuggerReserved"/>
public byte[] DebuggerReserved => _cart.CommonHeader.DebuggerReserved;
public byte[] DebuggerReserved => _model.CommonHeader.DebuggerReserved;
#endregion
#region Extended DSi Header
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.GlobalMBK15Settings"/>
public uint[] GlobalMBK15Settings => _cart.ExtendedDSiHeader?.GlobalMBK15Settings;
public uint[] GlobalMBK15Settings => _model.ExtendedDSiHeader?.GlobalMBK15Settings;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.LocalMBK68SettingsARM9"/>
public uint[] LocalMBK68SettingsARM9 => _cart.ExtendedDSiHeader?.LocalMBK68SettingsARM9;
public uint[] LocalMBK68SettingsARM9 => _model.ExtendedDSiHeader?.LocalMBK68SettingsARM9;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.LocalMBK68SettingsARM7"/>
public uint[] LocalMBK68SettingsARM7 => _cart.ExtendedDSiHeader?.LocalMBK68SettingsARM7;
public uint[] LocalMBK68SettingsARM7 => _model.ExtendedDSiHeader?.LocalMBK68SettingsARM7;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.GlobalMBK9Setting"/>
public uint? GlobalMBK9Setting => _cart.ExtendedDSiHeader?.GlobalMBK9Setting;
public uint? GlobalMBK9Setting => _model.ExtendedDSiHeader?.GlobalMBK9Setting;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.RegionFlags"/>
public uint? RegionFlags => _cart.ExtendedDSiHeader?.RegionFlags;
public uint? RegionFlags => _model.ExtendedDSiHeader?.RegionFlags;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.AccessControl"/>
public uint? AccessControl => _cart.ExtendedDSiHeader?.AccessControl;
public uint? AccessControl => _model.ExtendedDSiHeader?.AccessControl;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM7SCFGEXTMask"/>
public uint? ARM7SCFGEXTMask => _cart.ExtendedDSiHeader?.ARM7SCFGEXTMask;
public uint? ARM7SCFGEXTMask => _model.ExtendedDSiHeader?.ARM7SCFGEXTMask;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ReservedFlags"/>
public uint? ReservedFlags => _cart.ExtendedDSiHeader?.ReservedFlags;
public uint? ReservedFlags => _model.ExtendedDSiHeader?.ReservedFlags;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM9iRomOffset"/>
public uint? ARM9iRomOffset => _cart.ExtendedDSiHeader?.ARM9iRomOffset;
public uint? ARM9iRomOffset => _model.ExtendedDSiHeader?.ARM9iRomOffset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.Reserved3"/>
public uint? Reserved3 => _cart.ExtendedDSiHeader?.Reserved3;
public uint? Reserved3 => _model.ExtendedDSiHeader?.Reserved3;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM9iLoadAddress"/>
public uint? ARM9iLoadAddress => _cart.ExtendedDSiHeader?.ARM9iLoadAddress;
public uint? ARM9iLoadAddress => _model.ExtendedDSiHeader?.ARM9iLoadAddress;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM9iSize"/>
public uint? ARM9iSize => _cart.ExtendedDSiHeader?.ARM9iSize;
public uint? ARM9iSize => _model.ExtendedDSiHeader?.ARM9iSize;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM7iRomOffset"/>
public uint? ARM7iRomOffset => _cart.ExtendedDSiHeader?.ARM7iRomOffset;
public uint? ARM7iRomOffset => _model.ExtendedDSiHeader?.ARM7iRomOffset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.Reserved4"/>
public uint? Reserved4 => _cart.ExtendedDSiHeader?.Reserved4;
public uint? Reserved4 => _model.ExtendedDSiHeader?.Reserved4;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM7iLoadAddress"/>
public uint? ARM7iLoadAddress => _cart.ExtendedDSiHeader?.ARM7iLoadAddress;
public uint? ARM7iLoadAddress => _model.ExtendedDSiHeader?.ARM7iLoadAddress;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM7iSize"/>
public uint? ARM7iSize => _cart.ExtendedDSiHeader?.ARM7iSize;
public uint? ARM7iSize => _model.ExtendedDSiHeader?.ARM7iSize;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestNTRRegionOffset"/>
public uint? DigestNTRRegionOffset => _cart.ExtendedDSiHeader?.DigestNTRRegionOffset;
public uint? DigestNTRRegionOffset => _model.ExtendedDSiHeader?.DigestNTRRegionOffset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestNTRRegionLength"/>
public uint? DigestNTRRegionLength => _cart.ExtendedDSiHeader?.DigestNTRRegionLength;
public uint? DigestNTRRegionLength => _model.ExtendedDSiHeader?.DigestNTRRegionLength;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestTWLRegionOffset"/>
public uint? DigestTWLRegionOffset => _cart.ExtendedDSiHeader?.DigestTWLRegionOffset;
public uint? DigestTWLRegionOffset => _model.ExtendedDSiHeader?.DigestTWLRegionOffset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestTWLRegionLength"/>
public uint? DigestTWLRegionLength => _cart.ExtendedDSiHeader?.DigestTWLRegionLength;
public uint? DigestTWLRegionLength => _model.ExtendedDSiHeader?.DigestTWLRegionLength;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestSectorHashtableRegionOffset"/>
public uint? DigestSectorHashtableRegionOffset => _cart.ExtendedDSiHeader?.DigestSectorHashtableRegionOffset;
public uint? DigestSectorHashtableRegionOffset => _model.ExtendedDSiHeader?.DigestSectorHashtableRegionOffset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestSectorHashtableRegionLength"/>
public uint? DigestSectorHashtableRegionLength => _cart.ExtendedDSiHeader?.DigestSectorHashtableRegionLength;
public uint? DigestSectorHashtableRegionLength => _model.ExtendedDSiHeader?.DigestSectorHashtableRegionLength;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestBlockHashtableRegionOffset"/>
public uint? DigestBlockHashtableRegionOffset => _cart.ExtendedDSiHeader?.DigestBlockHashtableRegionOffset;
public uint? DigestBlockHashtableRegionOffset => _model.ExtendedDSiHeader?.DigestBlockHashtableRegionOffset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestBlockHashtableRegionLength"/>
public uint? DigestBlockHashtableRegionLength => _cart.ExtendedDSiHeader?.DigestBlockHashtableRegionLength;
public uint? DigestBlockHashtableRegionLength => _model.ExtendedDSiHeader?.DigestBlockHashtableRegionLength;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestSectorSize"/>
public uint? DigestSectorSize => _cart.ExtendedDSiHeader?.DigestSectorSize;
public uint? DigestSectorSize => _model.ExtendedDSiHeader?.DigestSectorSize;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestBlockSectorCount"/>
public uint? DigestBlockSectorCount => _cart.ExtendedDSiHeader?.DigestBlockSectorCount;
public uint? DigestBlockSectorCount => _model.ExtendedDSiHeader?.DigestBlockSectorCount;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.IconBannerSize"/>
public uint? IconBannerSize => _cart.ExtendedDSiHeader?.IconBannerSize;
public uint? IconBannerSize => _model.ExtendedDSiHeader?.IconBannerSize;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.Unknown1"/>
public uint? Unknown1 => _cart.ExtendedDSiHeader?.Unknown1;
public uint? Unknown1 => _model.ExtendedDSiHeader?.Unknown1;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ModcryptArea1Offset"/>
public uint? ModcryptArea1Offset => _cart.ExtendedDSiHeader?.ModcryptArea1Offset;
public uint? ModcryptArea1Offset => _model.ExtendedDSiHeader?.ModcryptArea1Offset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ModcryptArea1Size"/>
public uint? ModcryptArea1Size => _cart.ExtendedDSiHeader?.ModcryptArea1Size;
public uint? ModcryptArea1Size => _model.ExtendedDSiHeader?.ModcryptArea1Size;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ModcryptArea2Offset"/>
public uint? ModcryptArea2Offset => _cart.ExtendedDSiHeader?.ModcryptArea2Offset;
public uint? ModcryptArea2Offset => _model.ExtendedDSiHeader?.ModcryptArea2Offset;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ModcryptArea2Size"/>
public uint? ModcryptArea2Size => _cart.ExtendedDSiHeader?.ModcryptArea2Size;
public uint? ModcryptArea2Size => _model.ExtendedDSiHeader?.ModcryptArea2Size;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.TitleID"/>
public byte[] TitleID => _cart.ExtendedDSiHeader?.TitleID;
public byte[] TitleID => _model.ExtendedDSiHeader?.TitleID;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DSiWarePublicSavSize"/>
public uint? DSiWarePublicSavSize => _cart.ExtendedDSiHeader?.DSiWarePublicSavSize;
public uint? DSiWarePublicSavSize => _model.ExtendedDSiHeader?.DSiWarePublicSavSize;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DSiWarePrivateSavSize"/>
public uint? DSiWarePrivateSavSize => _cart.ExtendedDSiHeader?.DSiWarePrivateSavSize;
public uint? DSiWarePrivateSavSize => _model.ExtendedDSiHeader?.DSiWarePrivateSavSize;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ReservedZero"/>
public byte[] ReservedZero => _cart.ExtendedDSiHeader?.ReservedZero;
public byte[] ReservedZero => _model.ExtendedDSiHeader?.ReservedZero;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.Unknown2"/>
public byte[] Unknown2 => _cart.ExtendedDSiHeader?.Unknown2;
public byte[] Unknown2 => _model.ExtendedDSiHeader?.Unknown2;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM9WithSecureAreaSHA1HMACHash"/>
public byte[] ARM9WithSecureAreaSHA1HMACHash => _cart.ExtendedDSiHeader?.ARM9WithSecureAreaSHA1HMACHash;
public byte[] ARM9WithSecureAreaSHA1HMACHash => _model.ExtendedDSiHeader?.ARM9WithSecureAreaSHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM7SHA1HMACHash"/>
public byte[] ARM7SHA1HMACHash => _cart.ExtendedDSiHeader?.ARM7SHA1HMACHash;
public byte[] ARM7SHA1HMACHash => _model.ExtendedDSiHeader?.ARM7SHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.DigestMasterSHA1HMACHash"/>
public byte[] DigestMasterSHA1HMACHash => _cart.ExtendedDSiHeader?.DigestMasterSHA1HMACHash;
public byte[] DigestMasterSHA1HMACHash => _model.ExtendedDSiHeader?.DigestMasterSHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.BannerSHA1HMACHash"/>
public byte[] BannerSHA1HMACHash => _cart.ExtendedDSiHeader?.BannerSHA1HMACHash;
public byte[] BannerSHA1HMACHash => _model.ExtendedDSiHeader?.BannerSHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM9iDecryptedSHA1HMACHash"/>
public byte[] ARM9iDecryptedSHA1HMACHash => _cart.ExtendedDSiHeader?.ARM9iDecryptedSHA1HMACHash;
public byte[] ARM9iDecryptedSHA1HMACHash => _model.ExtendedDSiHeader?.ARM9iDecryptedSHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM7iDecryptedSHA1HMACHash"/>
public byte[] ARM7iDecryptedSHA1HMACHash => _cart.ExtendedDSiHeader?.ARM7iDecryptedSHA1HMACHash;
public byte[] ARM7iDecryptedSHA1HMACHash => _model.ExtendedDSiHeader?.ARM7iDecryptedSHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.Reserved5"/>
public byte[] Reserved5 => _cart.ExtendedDSiHeader?.Reserved5;
public byte[] Reserved5 => _model.ExtendedDSiHeader?.Reserved5;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ARM9NoSecureAreaSHA1HMACHash"/>
public byte[] ARM9NoSecureAreaSHA1HMACHash => _cart.ExtendedDSiHeader?.ARM9NoSecureAreaSHA1HMACHash;
public byte[] ARM9NoSecureAreaSHA1HMACHash => _model.ExtendedDSiHeader?.ARM9NoSecureAreaSHA1HMACHash;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.Reserved6"/>
public byte[] Reserved6 => _cart.ExtendedDSiHeader?.Reserved6;
public byte[] Reserved6 => _model.ExtendedDSiHeader?.Reserved6;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.ReservedAndUnchecked"/>
public byte[] ReservedAndUnchecked => _cart.ExtendedDSiHeader?.ReservedAndUnchecked;
public byte[] ReservedAndUnchecked => _model.ExtendedDSiHeader?.ReservedAndUnchecked;
/// <inheritdoc cref="Models.Nitro.ExtendedDSiHeader.RSASignature"/>
public byte[] RSASignature => _cart.ExtendedDSiHeader?.RSASignature;
public byte[] RSASignature => _model.ExtendedDSiHeader?.RSASignature;
#endregion
#region Secure Area
/// <inheritdoc cref="Models.Nitro.Cart.SecureArea"/>
public byte[] SecureArea => _cart.SecureArea;
public byte[] SecureArea => _model.SecureArea;
#endregion
#region Name Table
/// <inheritdoc cref="Models.Nitro.NameTable.FolderAllocationTable"/>
public SabreTools.Models.Nitro.FolderAllocationTableEntry[] FolderAllocationTable => _cart.NameTable.FolderAllocationTable;
public SabreTools.Models.Nitro.FolderAllocationTableEntry[] FolderAllocationTable => _model.NameTable.FolderAllocationTable;
/// <inheritdoc cref="Models.Nitro.NameTable.NameList"/>
public SabreTools.Models.Nitro.NameListEntry[] NameList => _cart.NameTable.NameList;
public SabreTools.Models.Nitro.NameListEntry[] NameList => _model.NameTable.NameList;
#endregion
#region File Allocation Table
/// <inheritdoc cref="Models.Nitro.Cart.FileAllocationTable"/>
public SabreTools.Models.Nitro.FileAllocationTableEntry[] FileAllocationTable => _cart.FileAllocationTable;
public SabreTools.Models.Nitro.FileAllocationTableEntry[] FileAllocationTable => _model.FileAllocationTable;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the cart
/// </summary>
private SabreTools.Models.Nitro.Cart _cart;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private Nitro() { }
/// <inheritdoc/>
#if NET48
public Nitro(SabreTools.Models.Nitro.Cart model, byte[] data, int offset)
#else
public Nitro(SabreTools.Models.Nitro.Cart? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public Nitro(SabreTools.Models.Nitro.Cart model, Stream data)
#else
public Nitro(SabreTools.Models.Nitro.Cart? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a NDS cart image from a byte array and offset
@@ -368,13 +376,14 @@ namespace BinaryObjectScanner.Wrappers
if (archive == null)
return null;
var wrapper = new Nitro
try
{
_cart = archive,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new Nitro(archive, data);
}
catch
{
return null;
}
}
#endregion
@@ -458,7 +467,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Extended DSi Header Information:");
builder.AppendLine(" -------------------------");
if (_cart.ExtendedDSiHeader == null)
if (_model.ExtendedDSiHeader == null)
{
builder.AppendLine(" No extended DSi header");
}
@@ -632,7 +641,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_cart, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -3,12 +3,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class PAK : WrapperBase
public class PAK : WrapperBase<SabreTools.Models.PAK.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Half-Life Package File (PAK)";
public override string DescriptionString => "Half-Life Package File (PAK)";
#endregion
@@ -17,20 +17,20 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.PAK.Header.Signature"/>
public string Signature => _file.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.PAK.Header.DirectoryOffset"/>
public uint DirectoryOffset => _file.Header.DirectoryOffset;
public uint DirectoryOffset => _model.Header.DirectoryOffset;
/// <inheritdoc cref="Models.PAK.Header.DirectoryLength"/>
public uint DirectoryLength => _file.Header.DirectoryLength;
public uint DirectoryLength => _model.Header.DirectoryLength;
#endregion
#region Directory Items
/// <inheritdoc cref="Models.PAK.DirectoryItems"/>
public SabreTools.Models.PAK.DirectoryItem[] DirectoryItems => _file.DirectoryItems;
public SabreTools.Models.PAK.DirectoryItem[] DirectoryItems => _model.DirectoryItems;
#endregion
@@ -42,21 +42,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the PAK
/// </summary>
private SabreTools.Models.PAK.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private PAK() { }
/// <inheritdoc/>
#if NET48
public PAK(SabreTools.Models.PAK.File model, byte[] data, int offset)
#else
public PAK(SabreTools.Models.PAK.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public PAK(SabreTools.Models.PAK.File model, Stream data)
#else
public PAK(SabreTools.Models.PAK.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a PAK from a byte array and offset
@@ -94,13 +102,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new PAK
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new PAK(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -165,7 +174,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -3,12 +3,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class PFF : WrapperBase
public class PFF : WrapperBase<SabreTools.Models.PFF.Archive>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "NovaLogic Game Archive Format (PFF)";
public override string DescriptionString => "NovaLogic Game Archive Format (PFF)";
#endregion
@@ -17,61 +17,67 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.PFF.Header.HeaderSize"/>
public uint HeaderSize => _archive.Header.HeaderSize;
public uint HeaderSize => _model.Header.HeaderSize;
/// <inheritdoc cref="Models.PFF.Header.Signature"/>
public string Signature => _archive.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.PFF.Header.NumberOfFiles"/>
public uint NumberOfFiles => _archive.Header.NumberOfFiles;
public uint NumberOfFiles => _model.Header.NumberOfFiles;
/// <inheritdoc cref="Models.PFF.Header.FileSegmentSize"/>
public uint FileSegmentSize => _archive.Header.FileSegmentSize;
public uint FileSegmentSize => _model.Header.FileSegmentSize;
/// <inheritdoc cref="Models.PFF.Header.FileListOffset"/>
public uint FileListOffset => _archive.Header.FileListOffset;
public uint FileListOffset => _model.Header.FileListOffset;
#endregion
#region Segments
/// <inheritdoc cref="Models.PFF.Archive.Segments"/>
public SabreTools.Models.PFF.Segment[] Segments => _archive.Segments;
public SabreTools.Models.PFF.Segment[] Segments => _model.Segments;
#endregion
#region Footer
/// <inheritdoc cref="Models.PFF.Footer.SystemIP"/>
public uint SystemIP => _archive.Footer.SystemIP;
public uint SystemIP => _model.Footer.SystemIP;
/// <inheritdoc cref="Models.PFF.Footer.Reserved"/>
public uint Reserved => _archive.Footer.Reserved;
public uint Reserved => _model.Footer.Reserved;
/// <inheritdoc cref="Models.PFF.Footer.KingTag"/>
public string KingTag => _archive.Footer.KingTag;
public string KingTag => _model.Footer.KingTag;
#endregion
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the archive
/// </summary>
private SabreTools.Models.PFF.Archive _archive;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private PFF() { }
/// <inheritdoc/>
#if NET48
public PFF(SabreTools.Models.PFF.Archive model, byte[] data, int offset)
#else
public PFF(SabreTools.Models.PFF.Archive? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <summary>
/// <inheritdoc/>
#if NET48
public PFF(SabreTools.Models.PFF.Archive model, Stream data)
#else
public PFF(SabreTools.Models.PFF.Archive? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}/// <summary>
/// Create a PFF archive from a byte array and offset
/// </summary>
/// <param name="data">Byte array representing the archive</param>
@@ -107,13 +113,14 @@ namespace BinaryObjectScanner.Wrappers
if (archive == null)
return null;
var wrapper = new PFF
try
{
_archive = archive,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new PFF(archive, data);
}
catch
{
return null;
}
}
#endregion
@@ -271,7 +278,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_archive, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class PlayJAudioFile : WrapperBase
public class PlayJAudioFile : WrapperBase<SabreTools.Models.PlayJ.AudioFile>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "PlayJ Audio File (PLJ)";
public override string DescriptionString => "PlayJ Audio File (PLJ)";
#endregion
@@ -18,169 +18,169 @@ namespace BinaryObjectScanner.Wrappers
#region Audio Header
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Signature"/>
public uint Signature => _audioFile.Header.Signature;
public uint Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Version"/>
public uint Version => _audioFile.Header.Version;
public uint Version => _model.Header.Version;
#region V1 Only
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.TrackID"/>
public uint? V1_TrackID => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.TrackID;
public uint? V1_TrackID => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.TrackID;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.UnknownOffset1"/>
public uint? V1_UnknownOffset1 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.UnknownOffset1;
public uint? V1_UnknownOffset1 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.UnknownOffset1;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.UnknownOffset2"/>
public uint? V1_UnknownOffset2 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.UnknownOffset2;
public uint? V1_UnknownOffset2 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.UnknownOffset2;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.UnknownOffset3"/>
public uint? V1_UnknownOffset3 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.UnknownOffset3;
public uint? V1_UnknownOffset3 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.UnknownOffset3;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Unknown1"/>
public uint? V1_Unknown1 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Unknown1;
public uint? V1_Unknown1 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Unknown1;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Unknown2"/>
public uint? V1_Unknown2 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Unknown2;
public uint? V1_Unknown2 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Unknown2;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Year"/>
public uint? V1_Year => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Year;
public uint? V1_Year => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Year;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.TrackNumber"/>
public uint? V1_TrackNumber => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.TrackNumber;
public uint? V1_TrackNumber => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.TrackNumber;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Subgenre"/>
public SabreTools.Models.PlayJ.Subgenre? V1_Subgenre => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Subgenre;
public SabreTools.Models.PlayJ.Subgenre? V1_Subgenre => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Subgenre;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV1.Duration"/>
public uint? V1_Duration => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Duration;
public uint? V1_Duration => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV1)?.Duration;
#endregion
#region V2 Only
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown1"/>
public uint? V2_Unknown1 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown1;
public uint? V2_Unknown1 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown1;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown2"/>
public uint? V2_Unknown2 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown2;
public uint? V2_Unknown2 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown2;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown3"/>
public uint? V2_Unknown3 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown3;
public uint? V2_Unknown3 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown3;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown4"/>
public uint? V2_Unknown4 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown4;
public uint? V2_Unknown4 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown4;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown5"/>
public uint? V2_Unknown5 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown5;
public uint? V2_Unknown5 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown5;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown6"/>
public uint? V2_Unknown6 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown6;
public uint? V2_Unknown6 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown6;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.UnknownOffset1"/>
public uint? V2_UnknownOffset1 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.UnknownOffset1;
public uint? V2_UnknownOffset1 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.UnknownOffset1;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown7"/>
public uint? V2_Unknown7 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown7;
public uint? V2_Unknown7 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown7;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown8"/>
public uint? V2_Unknown8 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown8;
public uint? V2_Unknown8 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown8;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown9"/>
public uint? V2_Unknown9 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown9;
public uint? V2_Unknown9 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown9;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.UnknownOffset2"/>
public uint? V2_UnknownOffset2 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.UnknownOffset2;
public uint? V2_UnknownOffset2 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.UnknownOffset2;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown10"/>
public uint? V2_Unknown10 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown10;
public uint? V2_Unknown10 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown10;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown11"/>
public uint? V2_Unknown11 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown11;
public uint? V2_Unknown11 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown11;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown12"/>
public uint? V2_Unknown12 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown12;
public uint? V2_Unknown12 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown12;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown13"/>
public uint? V2_Unknown13 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown13;
public uint? V2_Unknown13 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown13;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown14"/>
public uint? V2_Unknown14 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown14;
public uint? V2_Unknown14 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown14;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown15"/>
public uint? V2_Unknown15 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown15;
public uint? V2_Unknown15 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown15;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown16"/>
public uint? V2_Unknown16 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown16;
public uint? V2_Unknown16 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown16;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown17"/>
public uint? V2_Unknown17 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown17;
public uint? V2_Unknown17 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown17;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.TrackID"/>
public uint? V2_TrackID => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.TrackID;
public uint? V2_TrackID => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.TrackID;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Year"/>
public uint? V2_Year => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Year;
public uint? V2_Year => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Year;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.TrackNumber"/>
public uint? V2_TrackNumber => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.TrackNumber;
public uint? V2_TrackNumber => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.TrackNumber;
/// <inheritdoc cref="Models.PlayJ.AudioHeaderV2.Unknown18"/>
public uint? V2_Unknown18 => (_audioFile.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown18;
public uint? V2_Unknown18 => (_model.Header as SabreTools.Models.PlayJ.AudioHeaderV2)?.Unknown18;
#endregion
/// <inheritdoc cref="Models.PlayJ.AudioHeader.TrackLength"/>
public ushort TrackLength => _audioFile.Header.TrackLength;
public ushort TrackLength => _model.Header.TrackLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Track"/>
public string Track => _audioFile.Header.Track;
public string Track => _model.Header.Track;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.ArtistLength"/>
public ushort ArtistLength => _audioFile.Header.ArtistLength;
public ushort ArtistLength => _model.Header.ArtistLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Artist"/>
public string Artist => _audioFile.Header.Artist;
public string Artist => _model.Header.Artist;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.AlbumLength"/>
public ushort AlbumLength => _audioFile.Header.AlbumLength;
public ushort AlbumLength => _model.Header.AlbumLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Album"/>
public string Album => _audioFile.Header.Album;
public string Album => _model.Header.Album;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.WriterLength"/>
public ushort WriterLength => _audioFile.Header.WriterLength;
public ushort WriterLength => _model.Header.WriterLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Writer"/>
public string Writer => _audioFile.Header.Writer;
public string Writer => _model.Header.Writer;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.PublisherLength"/>
public ushort PublisherLength => _audioFile.Header.PublisherLength;
public ushort PublisherLength => _model.Header.PublisherLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Publisher"/>
public string Publisher => _audioFile.Header.Publisher;
public string Publisher => _model.Header.Publisher;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.LabelLength"/>
public ushort LabelLength => _audioFile.Header.LabelLength;
public ushort LabelLength => _model.Header.LabelLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Label"/>
public string Label => _audioFile.Header.Label;
public string Label => _model.Header.Label;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.CommentsLength"/>
public ushort CommentsLength => _audioFile.Header.CommentsLength;
public ushort CommentsLength => _model.Header.CommentsLength;
/// <inheritdoc cref="Models.PlayJ.AudioHeader.Comments"/>
public string Comments => _audioFile.Header.Comments;
public string Comments => _model.Header.Comments;
#endregion
#region Unknown Block 1
/// <inheritdoc cref="Models.PlayJ.UnknownBlock1.Length"/>
public uint UB1_Length => _audioFile.UnknownBlock1.Length;
public uint UB1_Length => _model.UnknownBlock1.Length;
/// <inheritdoc cref="Models.PlayJ.UnknownBlock1.Data"/>
public byte[] UB1_Data => _audioFile.UnknownBlock1.Data;
public byte[] UB1_Data => _model.UnknownBlock1.Data;
#endregion
@@ -189,14 +189,14 @@ namespace BinaryObjectScanner.Wrappers
#region Unknown Value 2
/// <inheritdoc cref="Models.PlayJ.AudioFile.UnknownValue2"/>
public uint UnknownValue2 => _audioFile.UnknownValue2;
public uint UnknownValue2 => _model.UnknownValue2;
#endregion
#region Unknown Block 3
/// <inheritdoc cref="Models.PlayJ.UnknownBlock3.Data"/>
public byte[] UB3_Data => _audioFile.UnknownBlock3.Data;
public byte[] UB3_Data => _model.UnknownBlock3.Data;
#endregion
@@ -207,14 +207,14 @@ namespace BinaryObjectScanner.Wrappers
#region Data Files Count
/// <inheritdoc cref="Models.PlayJ.AudioFile.DataFilesCount"/>
public uint DataFilesCount => _audioFile.DataFilesCount;
public uint DataFilesCount => _model.DataFilesCount;
#endregion
#region Unknown Block 3
/// <inheritdoc cref="Models.PlayJ.AudioFile.DataFiles"/>
public SabreTools.Models.PlayJ.DataFile[] DataFiles => _audioFile.DataFiles;
public SabreTools.Models.PlayJ.DataFile[] DataFiles => _model.DataFiles;
#endregion
@@ -222,21 +222,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the archive
/// </summary>
private SabreTools.Models.PlayJ.AudioFile _audioFile;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private PlayJAudioFile() { }
/// <inheritdoc/>
#if NET48
public PlayJAudioFile(SabreTools.Models.PlayJ.AudioFile model, byte[] data, int offset)
#else
public PlayJAudioFile(SabreTools.Models.PlayJ.AudioFile? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public PlayJAudioFile(SabreTools.Models.PlayJ.AudioFile model, Stream data)
#else
public PlayJAudioFile(SabreTools.Models.PlayJ.AudioFile? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a PlayJ audio file from a byte array and offset
@@ -274,13 +282,14 @@ namespace BinaryObjectScanner.Wrappers
if (audioFile == null)
return null;
var wrapper = new PlayJAudioFile
try
{
_audioFile = audioFile,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new PlayJAudioFile(audioFile, data);
}
catch
{
return null;
}
}
#endregion
@@ -446,7 +455,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_audioFile, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -10,12 +10,12 @@ using static SabreTools.Serialization.Extensions;
namespace BinaryObjectScanner.Wrappers
{
public class PortableExecutable : WrapperBase
public class PortableExecutable : WrapperBase<SabreTools.Models.PortableExecutable.Executable>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Portable Executable (PE)";
public override string DescriptionString => "Portable Executable (PE)";
#endregion
@@ -26,95 +26,95 @@ 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
#endregion
/// <inheritdoc cref="Models.PortableExecutable.Executable.Signature"/>
public string Signature => _executable.Signature;
public string Signature => _model.Signature;
#region COFF File Header
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.Machine"/>
public SabreTools.Models.PortableExecutable.MachineType Machine => _executable.COFFFileHeader.Machine;
public SabreTools.Models.PortableExecutable.MachineType Machine => _model.COFFFileHeader.Machine;
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.NumberOfSections"/>
public ushort NumberOfSections => _executable.COFFFileHeader.NumberOfSections;
public ushort NumberOfSections => _model.COFFFileHeader.NumberOfSections;
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.TimeDateStamp"/>
public uint TimeDateStamp => _executable.COFFFileHeader.TimeDateStamp;
public uint TimeDateStamp => _model.COFFFileHeader.TimeDateStamp;
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.PointerToSymbolTable"/>
public uint PointerToSymbolTable => _executable.COFFFileHeader.PointerToSymbolTable;
public uint PointerToSymbolTable => _model.COFFFileHeader.PointerToSymbolTable;
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.NumberOfSymbols"/>
public uint NumberOfSymbols => _executable.COFFFileHeader.NumberOfSymbols;
public uint NumberOfSymbols => _model.COFFFileHeader.NumberOfSymbols;
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.SizeOfOptionalHeader"/>
public uint SizeOfOptionalHeader => _executable.COFFFileHeader.SizeOfOptionalHeader;
public uint SizeOfOptionalHeader => _model.COFFFileHeader.SizeOfOptionalHeader;
/// <inheritdoc cref="Models.PortableExecutable.COFFFileHeader.Characteristics"/>
public SabreTools.Models.PortableExecutable.Characteristics Characteristics => _executable.COFFFileHeader.Characteristics;
public SabreTools.Models.PortableExecutable.Characteristics Characteristics => _model.COFFFileHeader.Characteristics;
#endregion
@@ -123,32 +123,32 @@ namespace BinaryObjectScanner.Wrappers
#region Standard Fields
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.Machine"/>
public SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber OH_Magic => _executable.OptionalHeader.Magic;
public SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber OH_Magic => _model.OptionalHeader.Magic;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MajorLinkerVersion"/>
public byte OH_MajorLinkerVersion => _executable.OptionalHeader.MajorLinkerVersion;
public byte OH_MajorLinkerVersion => _model.OptionalHeader.MajorLinkerVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MinorLinkerVersion"/>
public byte OH_MinorLinkerVersion => _executable.OptionalHeader.MinorLinkerVersion;
public byte OH_MinorLinkerVersion => _model.OptionalHeader.MinorLinkerVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfCode"/>
public uint OH_SizeOfCode => _executable.OptionalHeader.SizeOfCode;
public uint OH_SizeOfCode => _model.OptionalHeader.SizeOfCode;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfInitializedData"/>
public uint OH_SizeOfInitializedData => _executable.OptionalHeader.SizeOfInitializedData;
public uint OH_SizeOfInitializedData => _model.OptionalHeader.SizeOfInitializedData;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfUninitializedData"/>
public uint OH_SizeOfUninitializedData => _executable.OptionalHeader.SizeOfUninitializedData;
public uint OH_SizeOfUninitializedData => _model.OptionalHeader.SizeOfUninitializedData;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.AddressOfEntryPoint"/>
public uint OH_AddressOfEntryPoint => _executable.OptionalHeader.AddressOfEntryPoint;
public uint OH_AddressOfEntryPoint => _model.OptionalHeader.AddressOfEntryPoint;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.BaseOfCode"/>
public uint OH_BaseOfCode => _executable.OptionalHeader.BaseOfCode;
public uint OH_BaseOfCode => _model.OptionalHeader.BaseOfCode;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.BaseOfData"/>
public uint? OH_BaseOfData => _executable.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? (uint?)_executable.OptionalHeader.BaseOfData
public uint? OH_BaseOfData => _model.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? (uint?)_model.OptionalHeader.BaseOfData
: null;
#endregion
@@ -156,129 +156,129 @@ namespace BinaryObjectScanner.Wrappers
#region Windows-Specific Fields
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ImageBase_PE32"/>
public ulong OH_ImageBase => _executable.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _executable.OptionalHeader.ImageBase_PE32
: _executable.OptionalHeader.ImageBase_PE32Plus;
public ulong OH_ImageBase => _model.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _model.OptionalHeader.ImageBase_PE32
: _model.OptionalHeader.ImageBase_PE32Plus;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SectionAlignment"/>
public uint OH_SectionAlignment => _executable.OptionalHeader.SectionAlignment;
public uint OH_SectionAlignment => _model.OptionalHeader.SectionAlignment;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.FileAlignment"/>
public uint OH_FileAlignment => _executable.OptionalHeader.FileAlignment;
public uint OH_FileAlignment => _model.OptionalHeader.FileAlignment;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MajorOperatingSystemVersion"/>
public ushort OH_MajorOperatingSystemVersion => _executable.OptionalHeader.MajorOperatingSystemVersion;
public ushort OH_MajorOperatingSystemVersion => _model.OptionalHeader.MajorOperatingSystemVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MinorOperatingSystemVersion"/>
public ushort OH_MinorOperatingSystemVersion => _executable.OptionalHeader.MinorOperatingSystemVersion;
public ushort OH_MinorOperatingSystemVersion => _model.OptionalHeader.MinorOperatingSystemVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MajorImageVersion"/>
public ushort OH_MajorImageVersion => _executable.OptionalHeader.MajorImageVersion;
public ushort OH_MajorImageVersion => _model.OptionalHeader.MajorImageVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MinorImageVersion"/>
public ushort OH_MinorImageVersion => _executable.OptionalHeader.MinorImageVersion;
public ushort OH_MinorImageVersion => _model.OptionalHeader.MinorImageVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MajorSubsystemVersion"/>
public ushort OH_MajorSubsystemVersion => _executable.OptionalHeader.MajorSubsystemVersion;
public ushort OH_MajorSubsystemVersion => _model.OptionalHeader.MajorSubsystemVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.MinorSubsystemVersion"/>
public ushort OH_MinorSubsystemVersion => _executable.OptionalHeader.MinorSubsystemVersion;
public ushort OH_MinorSubsystemVersion => _model.OptionalHeader.MinorSubsystemVersion;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.Win32VersionValue"/>
public uint OH_Win32VersionValue => _executable.OptionalHeader.Win32VersionValue;
public uint OH_Win32VersionValue => _model.OptionalHeader.Win32VersionValue;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfImage"/>
public uint OH_SizeOfImage => _executable.OptionalHeader.SizeOfImage;
public uint OH_SizeOfImage => _model.OptionalHeader.SizeOfImage;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfHeaders"/>
public uint OH_SizeOfHeaders => _executable.OptionalHeader.SizeOfHeaders;
public uint OH_SizeOfHeaders => _model.OptionalHeader.SizeOfHeaders;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.CheckSum"/>
public uint OH_CheckSum => _executable.OptionalHeader.CheckSum;
public uint OH_CheckSum => _model.OptionalHeader.CheckSum;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.Subsystem"/>
public SabreTools.Models.PortableExecutable.WindowsSubsystem OH_Subsystem => _executable.OptionalHeader.Subsystem;
public SabreTools.Models.PortableExecutable.WindowsSubsystem OH_Subsystem => _model.OptionalHeader.Subsystem;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.DllCharacteristics"/>
public SabreTools.Models.PortableExecutable.DllCharacteristics OH_DllCharacteristics => _executable.OptionalHeader.DllCharacteristics;
public SabreTools.Models.PortableExecutable.DllCharacteristics OH_DllCharacteristics => _model.OptionalHeader.DllCharacteristics;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfStackReserve_PE32"/>
public ulong OH_SizeOfStackReserve => _executable.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _executable.OptionalHeader.SizeOfStackReserve_PE32
: _executable.OptionalHeader.SizeOfStackReserve_PE32Plus;
public ulong OH_SizeOfStackReserve => _model.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _model.OptionalHeader.SizeOfStackReserve_PE32
: _model.OptionalHeader.SizeOfStackReserve_PE32Plus;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfStackCommit_PE32"/>
public ulong OH_SizeOfStackCommit => _executable.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _executable.OptionalHeader.SizeOfStackCommit_PE32
: _executable.OptionalHeader.SizeOfStackCommit_PE32Plus;
public ulong OH_SizeOfStackCommit => _model.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _model.OptionalHeader.SizeOfStackCommit_PE32
: _model.OptionalHeader.SizeOfStackCommit_PE32Plus;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfHeapReserve_PE32"/>
public ulong OH_SizeOfHeapReserve => _executable.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _executable.OptionalHeader.SizeOfHeapReserve_PE32
: _executable.OptionalHeader.SizeOfHeapReserve_PE32Plus;
public ulong OH_SizeOfHeapReserve => _model.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _model.OptionalHeader.SizeOfHeapReserve_PE32
: _model.OptionalHeader.SizeOfHeapReserve_PE32Plus;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.SizeOfHeapCommit_PE32"/>
public ulong OH_SizeOfHeapCommit => _executable.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _executable.OptionalHeader.SizeOfHeapCommit_PE32
: _executable.OptionalHeader.SizeOfHeapCommit_PE32Plus;
public ulong OH_SizeOfHeapCommit => _model.OptionalHeader.Magic == SabreTools.Models.PortableExecutable.OptionalHeaderMagicNumber.PE32
? _model.OptionalHeader.SizeOfHeapCommit_PE32
: _model.OptionalHeader.SizeOfHeapCommit_PE32Plus;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.LoaderFlags"/>
public uint OH_LoaderFlags => _executable.OptionalHeader.LoaderFlags;
public uint OH_LoaderFlags => _model.OptionalHeader.LoaderFlags;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.NumberOfRvaAndSizes"/>
public uint OH_NumberOfRvaAndSizes => _executable.OptionalHeader.NumberOfRvaAndSizes;
public uint OH_NumberOfRvaAndSizes => _model.OptionalHeader.NumberOfRvaAndSizes;
#endregion
#region Data Directories
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ExportTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_ExportTable => _executable.OptionalHeader.ExportTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_ExportTable => _model.OptionalHeader.ExportTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ImportTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_ImportTable => _executable.OptionalHeader.ImportTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_ImportTable => _model.OptionalHeader.ImportTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ResourceTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_ResourceTable => _executable.OptionalHeader.ResourceTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_ResourceTable => _model.OptionalHeader.ResourceTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ExceptionTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_ExceptionTable => _executable.OptionalHeader.ExceptionTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_ExceptionTable => _model.OptionalHeader.ExceptionTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.CertificateTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_CertificateTable => _executable.OptionalHeader.CertificateTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_CertificateTable => _model.OptionalHeader.CertificateTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.BaseRelocationTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_BaseRelocationTable => _executable.OptionalHeader.BaseRelocationTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_BaseRelocationTable => _model.OptionalHeader.BaseRelocationTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.Debug"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_Debug => _executable.OptionalHeader.Debug;
public SabreTools.Models.PortableExecutable.DataDirectory OH_Debug => _model.OptionalHeader.Debug;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.Architecture"/>
public ulong OH_Architecture => _executable.OptionalHeader.Architecture;
public ulong OH_Architecture => _model.OptionalHeader.Architecture;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.GlobalPtr"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_GlobalPtr => _executable.OptionalHeader.GlobalPtr;
public SabreTools.Models.PortableExecutable.DataDirectory OH_GlobalPtr => _model.OptionalHeader.GlobalPtr;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ThreadLocalStorageTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_ThreadLocalStorageTable => _executable.OptionalHeader.ThreadLocalStorageTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_ThreadLocalStorageTable => _model.OptionalHeader.ThreadLocalStorageTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.LoadConfigTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_LoadConfigTable => _executable.OptionalHeader.LoadConfigTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_LoadConfigTable => _model.OptionalHeader.LoadConfigTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.BoundImport"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_BoundImport => _executable.OptionalHeader.BoundImport;
public SabreTools.Models.PortableExecutable.DataDirectory OH_BoundImport => _model.OptionalHeader.BoundImport;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.ImportAddressTable"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_ImportAddressTable => _executable.OptionalHeader.ImportAddressTable;
public SabreTools.Models.PortableExecutable.DataDirectory OH_ImportAddressTable => _model.OptionalHeader.ImportAddressTable;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.DelayImportDescriptor"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_DelayImportDescriptor => _executable.OptionalHeader.DelayImportDescriptor;
public SabreTools.Models.PortableExecutable.DataDirectory OH_DelayImportDescriptor => _model.OptionalHeader.DelayImportDescriptor;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.CLRRuntimeHeader"/>
public SabreTools.Models.PortableExecutable.DataDirectory OH_CLRRuntimeHeader => _executable.OptionalHeader.CLRRuntimeHeader;
public SabreTools.Models.PortableExecutable.DataDirectory OH_CLRRuntimeHeader => _model.OptionalHeader.CLRRuntimeHeader;
/// <inheritdoc cref="Models.PortableExecutable.OptionalHeader.Reserved"/>
public ulong OH_Reserved => _executable.OptionalHeader.Reserved;
public ulong OH_Reserved => _model.OptionalHeader.Reserved;
#endregion
@@ -287,46 +287,46 @@ namespace BinaryObjectScanner.Wrappers
#region Tables
/// <inheritdoc cref="Models.PortableExecutable.SectionTable"/>
public SabreTools.Models.PortableExecutable.SectionHeader[] SectionTable => _executable.SectionTable;
public SabreTools.Models.PortableExecutable.SectionHeader[] SectionTable => _model.SectionTable;
/// <inheritdoc cref="Models.PortableExecutable.COFFSymbolTable"/>
public SabreTools.Models.PortableExecutable.COFFSymbolTableEntry[] COFFSymbolTable => _executable.COFFSymbolTable;
public SabreTools.Models.PortableExecutable.COFFSymbolTableEntry[] COFFSymbolTable => _model.COFFSymbolTable;
/// <inheritdoc cref="Models.PortableExecutable.COFFStringTable"/>
public SabreTools.Models.PortableExecutable.COFFStringTable COFFStringTable => _executable.COFFStringTable;
public SabreTools.Models.PortableExecutable.COFFStringTable COFFStringTable => _model.COFFStringTable;
/// <inheritdoc cref="Models.PortableExecutable.AttributeCertificateTable"/>
public SabreTools.Models.PortableExecutable.AttributeCertificateTableEntry[] AttributeCertificateTable => _executable.AttributeCertificateTable;
public SabreTools.Models.PortableExecutable.AttributeCertificateTableEntry[] AttributeCertificateTable => _model.AttributeCertificateTable;
/// <inheritdoc cref="Models.PortableExecutable.DelayLoadDirectoryTable"/>
public SabreTools.Models.PortableExecutable.DelayLoadDirectoryTable DelayLoadDirectoryTable => _executable.DelayLoadDirectoryTable;
public SabreTools.Models.PortableExecutable.DelayLoadDirectoryTable DelayLoadDirectoryTable => _model.DelayLoadDirectoryTable;
#endregion
#region Sections
/// <inheritdoc cref="Models.PortableExecutable.BaseRelocationTable"/>
public SabreTools.Models.PortableExecutable.BaseRelocationBlock[] BaseRelocationTable => _executable.BaseRelocationTable;
public SabreTools.Models.PortableExecutable.BaseRelocationBlock[] BaseRelocationTable => _model.BaseRelocationTable;
/// <inheritdoc cref="Models.PortableExecutable.DebugTable"/>
public SabreTools.Models.PortableExecutable.DebugTable DebugTable => _executable.DebugTable;
public SabreTools.Models.PortableExecutable.DebugTable DebugTable => _model.DebugTable;
/// <inheritdoc cref="Models.PortableExecutable.ExportTable"/>
public SabreTools.Models.PortableExecutable.ExportTable ExportTable => _executable.ExportTable;
public SabreTools.Models.PortableExecutable.ExportTable ExportTable => _model.ExportTable;
/// <inheritdoc cref="Models.PortableExecutable.ExportTable.ExportNameTable"/>
public string[] ExportNameTable => _executable.ExportTable?.ExportNameTable?.Strings;
public string[] ExportNameTable => _model.ExportTable?.ExportNameTable?.Strings;
/// <inheritdoc cref="Models.PortableExecutable.ImportTable"/>
public SabreTools.Models.PortableExecutable.ImportTable ImportTable => _executable.ImportTable;
public SabreTools.Models.PortableExecutable.ImportTable ImportTable => _model.ImportTable;
/// <inheritdoc cref="Models.PortableExecutable.ImportTable.HintNameTable"/>
public string[] ImportHintNameTable => _executable.ImportTable?.HintNameTable != null
? _executable.ImportTable.HintNameTable.Select(entry => entry.Name).ToArray()
public string[] ImportHintNameTable => _model.ImportTable?.HintNameTable != null
? _model.ImportTable.HintNameTable.Select(entry => entry.Name).ToArray()
: null;
/// <inheritdoc cref="Models.PortableExecutable.ResourceDirectoryTable"/>
public SabreTools.Models.PortableExecutable.ResourceDirectoryTable ResourceDirectoryTable => _executable.ResourceDirectoryTable;
public SabreTools.Models.PortableExecutable.ResourceDirectoryTable ResourceDirectoryTable => _model.ResourceDirectoryTable;
#endregion
@@ -442,18 +442,18 @@ namespace BinaryObjectScanner.Wrappers
// If we have certificate data, use that as the end
if (OH_CertificateTable != null)
{
var certificateTable = _executable.OptionalHeader.CertificateTable;
int certificateTableAddress = (int)certificateTable.VirtualAddress.ConvertVirtualAddress(_executable.SectionTable);
var certificateTable = _model.OptionalHeader.CertificateTable;
int certificateTableAddress = (int)certificateTable.VirtualAddress.ConvertVirtualAddress(_model.SectionTable);
if (certificateTableAddress != 0 && certificateTableAddress < endOfFile)
endOfFile = certificateTableAddress;
}
// Search through all sections and find the furthest a section goes
int endOfSectionData = -1;
foreach (var section in _executable.SectionTable)
foreach (var section in _model.SectionTable)
{
// If we have an invalid section address
int sectionAddress = (int)section.VirtualAddress.ConvertVirtualAddress(_executable.SectionTable);
int sectionAddress = (int)section.VirtualAddress.ConvertVirtualAddress(_model.SectionTable);
if (sectionAddress == 0)
continue;
@@ -506,18 +506,18 @@ namespace BinaryObjectScanner.Wrappers
// If we have certificate data, use that as the end
if (OH_CertificateTable != null)
{
var certificateTable = _executable.OptionalHeader.CertificateTable;
int certificateTableAddress = (int)certificateTable.VirtualAddress.ConvertVirtualAddress(_executable.SectionTable);
var certificateTable = _model.OptionalHeader.CertificateTable;
int certificateTableAddress = (int)certificateTable.VirtualAddress.ConvertVirtualAddress(_model.SectionTable);
if (certificateTableAddress != 0 && certificateTableAddress < endOfFile)
endOfFile = certificateTableAddress;
}
// Search through all sections and find the furthest a section goes
int endOfSectionData = -1;
foreach (var section in _executable.SectionTable)
foreach (var section in _model.SectionTable)
{
// If we have an invalid section address
int sectionAddress = (int)section.VirtualAddress.ConvertVirtualAddress(_executable.SectionTable);
int sectionAddress = (int)section.VirtualAddress.ConvertVirtualAddress(_model.SectionTable);
if (sectionAddress == 0)
continue;
@@ -577,18 +577,18 @@ namespace BinaryObjectScanner.Wrappers
// If we have certificate data, use that as the end
if (OH_CertificateTable != null)
{
var certificateTable = _executable.OptionalHeader.CertificateTable;
int certificateTableAddress = (int)certificateTable.VirtualAddress.ConvertVirtualAddress(_executable.SectionTable);
var certificateTable = _model.OptionalHeader.CertificateTable;
int certificateTableAddress = (int)certificateTable.VirtualAddress.ConvertVirtualAddress(_model.SectionTable);
if (certificateTableAddress != 0 && certificateTableAddress < endOfFile)
endOfFile = certificateTableAddress;
}
// Search through all sections and find the furthest a section goes
int endOfSectionData = -1;
foreach (var section in _executable.SectionTable)
foreach (var section in _model.SectionTable)
{
// If we have an invalid section address
int sectionAddress = (int)section.VirtualAddress.ConvertVirtualAddress(_executable.SectionTable);
int sectionAddress = (int)section.VirtualAddress.ConvertVirtualAddress(_model.SectionTable);
if (sectionAddress == 0)
continue;
@@ -641,10 +641,10 @@ namespace BinaryObjectScanner.Wrappers
return _sectionNames;
// Otherwise, build and return the cached array
_sectionNames = new string[_executable.SectionTable.Length];
_sectionNames = new string[_model.SectionTable.Length];
for (int i = 0; i < _sectionNames.Length; i++)
{
var section = _executable.SectionTable[i];
var section = _model.SectionTable[i];
// TODO: Handle long section names with leading `/`
byte[] sectionNameBytes = section.Name;
@@ -672,7 +672,7 @@ namespace BinaryObjectScanner.Wrappers
// Populate the raw stub executable data based on the source
int endOfStubHeader = 0x40;
int lengthOfStubExecutableData = (int)_executable.Stub.Header.NewExeHeaderAddr - endOfStubHeader;
int lengthOfStubExecutableData = (int)_model.Stub.Header.NewExeHeaderAddr - endOfStubHeader;
_stubExecutableData = ReadFromDataSource(endOfStubHeader, lengthOfStubExecutableData);
// Cache and return the stub executable data, even if null
@@ -903,11 +903,6 @@ namespace BinaryObjectScanner.Wrappers
#region Instance Variables
/// <summary>
/// Internal representation of the executable
/// </summary>
private SabreTools.Models.PortableExecutable.Executable _executable;
/// <summary>
/// Header padding data, if it exists
/// </summary>
@@ -997,10 +992,27 @@ namespace BinaryObjectScanner.Wrappers
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private PortableExecutable() { }
/// <inheritdoc/>
#if NET48
public PortableExecutable(SabreTools.Models.PortableExecutable.Executable model, byte[] data, int offset)
#else
public PortableExecutable(SabreTools.Models.PortableExecutable.Executable? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public PortableExecutable(SabreTools.Models.PortableExecutable.Executable model, Stream data)
#else
public PortableExecutable(SabreTools.Models.PortableExecutable.Executable? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a PE executable from a byte array and offset
@@ -1038,13 +1050,14 @@ namespace BinaryObjectScanner.Wrappers
if (executable == null)
return null;
var wrapper = new PortableExecutable
try
{
_executable = executable,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new PortableExecutable(executable, data);
}
catch
{
return null;
}
}
#endregion
@@ -2995,7 +3008,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

View File

@@ -3,12 +3,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class Quantum : WrapperBase
public class Quantum : WrapperBase<SabreTools.Models.Quantum.Archive>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Quantum Archive";
public override string DescriptionString => "Quantum Archive";
#endregion
@@ -17,52 +17,60 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.Quantum.Header.Signature"/>
public string Signature => _archive.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.Quantum.Header.MajorVersion"/>
public byte MajorVersion => _archive.Header.MajorVersion;
public byte MajorVersion => _model.Header.MajorVersion;
/// <inheritdoc cref="Models.Quantum.Header.MinorVersion"/>
public byte MinorVersion => _archive.Header.MinorVersion;
public byte MinorVersion => _model.Header.MinorVersion;
/// <inheritdoc cref="Models.Quantum.Header.FileCount"/>
public ushort FileCount => _archive.Header.FileCount;
public ushort FileCount => _model.Header.FileCount;
/// <inheritdoc cref="Models.Quantum.Header.TableSize"/>
public byte TableSize => _archive.Header.TableSize;
public byte TableSize => _model.Header.TableSize;
/// <inheritdoc cref="Models.Quantum.Header.CompressionFlags"/>
public byte CompressionFlags => _archive.Header.CompressionFlags;
public byte CompressionFlags => _model.Header.CompressionFlags;
#endregion
#region File List
/// <inheritdoc cref="Models.Quantum.Archive.FileList"/>
public SabreTools.Models.Quantum.FileDescriptor[] FileList => _archive.FileList;
public SabreTools.Models.Quantum.FileDescriptor[] FileList => _model.FileList;
#endregion
/// <inheritdoc cref="Models.Quantum.Archive.CompressedDataOffset"/>
public long CompressedDataOffset => _archive.CompressedDataOffset;
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the archive
/// </summary>
private SabreTools.Models.Quantum.Archive _archive;
public long CompressedDataOffset => _model.CompressedDataOffset;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private Quantum() { }
/// <inheritdoc/>
#if NET48
public Quantum(SabreTools.Models.Quantum.Archive model, byte[] data, int offset)
#else
public Quantum(SabreTools.Models.Quantum.Archive? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public Quantum(SabreTools.Models.Quantum.Archive model, Stream data)
#else
public Quantum(SabreTools.Models.Quantum.Archive? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a Quantum archive from a byte array and offset
@@ -100,13 +108,14 @@ namespace BinaryObjectScanner.Wrappers
if (archive == null)
return null;
var wrapper = new Quantum
try
{
_archive = archive,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new Quantum(archive, data);
}
catch
{
return null;
}
}
#endregion
@@ -294,7 +303,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_archive, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -7,12 +7,12 @@ using ICSharpCode.SharpZipLib.Zip.Compression;
namespace BinaryObjectScanner.Wrappers
{
public class SGA : WrapperBase
public class SGA : WrapperBase<SabreTools.Models.SGA.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "SGA";
public override string DescriptionString => "SGA";
#endregion
@@ -21,13 +21,13 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.SGA.Header4.Signature"/>
public string Signature => _file.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.SGA.Header4.MajorVersion"/>
public ushort MajorVersion => _file.Header.MajorVersion;
public ushort MajorVersion => _model.Header.MajorVersion;
/// <inheritdoc cref="Models.SGA.Header4.MinorVersion"/>
public ushort MinorVersion => _file.Header.MinorVersion;
public ushort MinorVersion => _model.Header.MinorVersion;
/// <inheritdoc cref="Models.SGA.Header4.FileMD5"/>
public byte[] FileMD5
@@ -36,8 +36,8 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Header as SabreTools.Models.SGA.Header4).FileMD5;
case 5: return (_file.Header as SabreTools.Models.SGA.Header4).FileMD5;
case 4: return (_model.Header as SabreTools.Models.SGA.Header4).FileMD5;
case 5: return (_model.Header as SabreTools.Models.SGA.Header4).FileMD5;
default: return null;
};
}
@@ -50,10 +50,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Header as SabreTools.Models.SGA.Header4).Name;
case 5: return (_file.Header as SabreTools.Models.SGA.Header4).Name;
case 6: return (_file.Header as SabreTools.Models.SGA.Header6).Name;
case 7: return (_file.Header as SabreTools.Models.SGA.Header6).Name;
case 4: return (_model.Header as SabreTools.Models.SGA.Header4).Name;
case 5: return (_model.Header as SabreTools.Models.SGA.Header4).Name;
case 6: return (_model.Header as SabreTools.Models.SGA.Header6).Name;
case 7: return (_model.Header as SabreTools.Models.SGA.Header6).Name;
default: return null;
};
}
@@ -66,8 +66,8 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Header as SabreTools.Models.SGA.Header4).HeaderMD5;
case 5: return (_file.Header as SabreTools.Models.SGA.Header4).HeaderMD5;
case 4: return (_model.Header as SabreTools.Models.SGA.Header4).HeaderMD5;
case 5: return (_model.Header as SabreTools.Models.SGA.Header4).HeaderMD5;
default: return null;
};
}
@@ -80,10 +80,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Header as SabreTools.Models.SGA.Header4).HeaderLength;
case 5: return (_file.Header as SabreTools.Models.SGA.Header4).HeaderLength;
case 6: return (_file.Header as SabreTools.Models.SGA.Header6).HeaderLength;
case 7: return (_file.Header as SabreTools.Models.SGA.Header6).HeaderLength;
case 4: return (_model.Header as SabreTools.Models.SGA.Header4).HeaderLength;
case 5: return (_model.Header as SabreTools.Models.SGA.Header4).HeaderLength;
case 6: return (_model.Header as SabreTools.Models.SGA.Header6).HeaderLength;
case 7: return (_model.Header as SabreTools.Models.SGA.Header6).HeaderLength;
default: return null;
};
}
@@ -96,10 +96,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Header as SabreTools.Models.SGA.Header4).FileDataOffset;
case 5: return (_file.Header as SabreTools.Models.SGA.Header4).FileDataOffset;
case 6: return (_file.Header as SabreTools.Models.SGA.Header6).FileDataOffset;
case 7: return (_file.Header as SabreTools.Models.SGA.Header6).FileDataOffset;
case 4: return (_model.Header as SabreTools.Models.SGA.Header4).FileDataOffset;
case 5: return (_model.Header as SabreTools.Models.SGA.Header4).FileDataOffset;
case 6: return (_model.Header as SabreTools.Models.SGA.Header6).FileDataOffset;
case 7: return (_model.Header as SabreTools.Models.SGA.Header6).FileDataOffset;
default: return null;
};
}
@@ -112,10 +112,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Header as SabreTools.Models.SGA.Header4).Dummy0;
case 5: return (_file.Header as SabreTools.Models.SGA.Header4).Dummy0;
case 6: return (_file.Header as SabreTools.Models.SGA.Header6).Dummy0;
case 7: return (_file.Header as SabreTools.Models.SGA.Header6).Dummy0;
case 4: return (_model.Header as SabreTools.Models.SGA.Header4).Dummy0;
case 5: return (_model.Header as SabreTools.Models.SGA.Header4).Dummy0;
case 6: return (_model.Header as SabreTools.Models.SGA.Header6).Dummy0;
case 7: return (_model.Header as SabreTools.Models.SGA.Header6).Dummy0;
default: return null;
};
}
@@ -134,10 +134,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.SectionOffset;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.SectionOffset;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.SectionOffset;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.SectionOffset;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.SectionOffset;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.SectionOffset;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.SectionOffset;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.SectionOffset;
default: return null;
};
}
@@ -150,10 +150,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.SectionCount;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.SectionCount;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.SectionCount;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.SectionCount;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.SectionCount;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.SectionCount;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.SectionCount;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.SectionCount;
default: return null;
};
}
@@ -166,10 +166,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FolderOffset;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FolderOffset;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FolderOffset;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FolderOffset;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FolderOffset;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FolderOffset;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FolderOffset;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FolderOffset;
default: return null;
};
}
@@ -182,10 +182,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FolderCount;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FolderCount;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FolderCount;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FolderCount;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FolderCount;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FolderCount;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FolderCount;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FolderCount;
default: return null;
};
}
@@ -198,10 +198,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FileOffset;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FileOffset;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FileOffset;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FileOffset;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FileOffset;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FileOffset;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FileOffset;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FileOffset;
default: return null;
};
}
@@ -214,10 +214,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FileCount;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FileCount;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FileCount;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FileCount;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.FileCount;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.FileCount;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.FileCount;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.FileCount;
default: return null;
};
}
@@ -230,10 +230,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.StringTableOffset;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.StringTableOffset;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.StringTableOffset;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.StringTableOffset;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.StringTableOffset;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.StringTableOffset;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.StringTableOffset;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.StringTableOffset;
default: return null;
};
}
@@ -246,10 +246,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.StringTableCount;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.StringTableCount;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.StringTableCount;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.StringTableCount;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).DirectoryHeader.StringTableCount;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).DirectoryHeader.StringTableCount;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).DirectoryHeader.StringTableCount;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.StringTableCount;
default: return null;
};
}
@@ -262,7 +262,7 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.HashTableOffset;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.HashTableOffset;
default: return null;
};
}
@@ -275,7 +275,7 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.BlockSize;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).DirectoryHeader.BlockSize;
default: return null;
};
}
@@ -292,10 +292,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).Sections;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).Sections;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).Sections;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).Sections;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).Sections;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).Sections;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).Sections;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).Sections;
default: return null;
};
}
@@ -312,10 +312,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).Folders;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).Folders;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).Folders;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).Folders;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).Folders;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).Folders;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).Folders;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).Folders;
default: return null;
};
}
@@ -332,10 +332,10 @@ namespace BinaryObjectScanner.Wrappers
{
switch (MajorVersion)
{
case 4: return (_file.Directory as SabreTools.Models.SGA.Directory4).Files;
case 5: return (_file.Directory as SabreTools.Models.SGA.Directory5).Files;
case 6: return (_file.Directory as SabreTools.Models.SGA.Directory6).Files;
case 7: return (_file.Directory as SabreTools.Models.SGA.Directory7).Files;
case 4: return (_model.Directory as SabreTools.Models.SGA.Directory4).Files;
case 5: return (_model.Directory as SabreTools.Models.SGA.Directory5).Files;
case 6: return (_model.Directory as SabreTools.Models.SGA.Directory6).Files;
case 7: return (_model.Directory as SabreTools.Models.SGA.Directory7).Files;
default: return null;
};
}
@@ -356,21 +356,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the SGA
/// </summary>
private SabreTools.Models.SGA.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private SGA() { }
/// <inheritdoc/>
#if NET48
public SGA(SabreTools.Models.SGA.File model, byte[] data, int offset)
#else
public SGA(SabreTools.Models.SGA.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public SGA(SabreTools.Models.SGA.File model, Stream data)
#else
public SGA(SabreTools.Models.SGA.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create an SGA from a byte array and offset
@@ -408,13 +416,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new SGA
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new SGA(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -653,7 +662,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -4,28 +4,28 @@ using static SabreTools.Models.VBSP.Constants;
namespace BinaryObjectScanner.Wrappers
{
public class VBSP : WrapperBase
public class VBSP : WrapperBase<SabreTools.Models.VBSP.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Half-Life 2 Level (VBSP)";
public override string DescriptionString => "Half-Life 2 Level (VBSP)";
#endregion
#region Pass-Through Properties
/// <inheritdoc cref="Models.VBSP.Header.Signature"/>
public string Signature => _file.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.VBSP.Header.Version"/>
public int Version => _file.Header.Version;
public int Version => _model.Header.Version;
/// <inheritdoc cref="Models.VBSP.File.Lumps"/>
public SabreTools.Models.VBSP.Lump[] Lumps => _file.Header.Lumps;
public SabreTools.Models.VBSP.Lump[] Lumps => _model.Header.Lumps;
/// <inheritdoc cref="Models.VBSP.Header.MapRevision"/>
public int MapRevision => _file.Header.MapRevision;
public int MapRevision => _model.Header.MapRevision;
#endregion
@@ -35,21 +35,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the VBSP
/// </summary>
private SabreTools.Models.VBSP.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private VBSP() { }
/// <inheritdoc/>
#if NET48
public VBSP(SabreTools.Models.VBSP.File model, byte[] data, int offset)
#else
public VBSP(SabreTools.Models.VBSP.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public VBSP(SabreTools.Models.VBSP.File model, Stream data)
#else
public VBSP(SabreTools.Models.VBSP.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a VBSP from a byte array and offset
@@ -87,13 +95,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new VBSP
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new VBSP(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -172,7 +181,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -7,12 +7,12 @@ using static SabreTools.Models.VPK.Constants;
namespace BinaryObjectScanner.Wrappers
{
public class VPK : WrapperBase
public class VPK : WrapperBase<SabreTools.Models.VPK.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Valve Package File (VPK)";
public override string DescriptionString => "Valve Package File (VPK)";
#endregion
@@ -21,43 +21,43 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.VPK.Header.Signature"/>
public uint Signature => _file.Header.Signature;
public uint Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.VPK.Header.Version"/>
public uint Version => _file.Header.Version;
public uint Version => _model.Header.Version;
/// <inheritdoc cref="Models.VPK.Header.DirectoryLength"/>
public uint DirectoryLength => _file.Header.DirectoryLength;
public uint DirectoryLength => _model.Header.DirectoryLength;
#endregion
#region Extended Header
/// <inheritdoc cref="Models.VPK.ExtendedHeader.Dummy0"/>
public uint? Dummy0 => _file.ExtendedHeader?.Dummy0;
public uint? Dummy0 => _model.ExtendedHeader?.Dummy0;
/// <inheritdoc cref="Models.VPK.ExtendedHeader.ArchiveHashLength"/>
public uint? ArchiveHashLength => _file.ExtendedHeader?.ArchiveHashLength;
public uint? ArchiveHashLength => _model.ExtendedHeader?.ArchiveHashLength;
/// <inheritdoc cref="Models.VPK.ExtendedHeader.ExtraLength"/>
public uint? ExtraLength => _file.ExtendedHeader?.ExtraLength;
public uint? ExtraLength => _model.ExtendedHeader?.ExtraLength;
/// <inheritdoc cref="Models.VPK.ExtendedHeader.Dummy1"/>
public uint? Dummy1 => _file.ExtendedHeader?.Dummy1;
public uint? Dummy1 => _model.ExtendedHeader?.Dummy1;
#endregion
#region Archive Hashes
/// <inheritdoc cref="Models.VPK.ArchiveHashes"/>
public SabreTools.Models.VPK.ArchiveHash[] ArchiveHashes => _file.ArchiveHashes;
public SabreTools.Models.VPK.ArchiveHash[] ArchiveHashes => _model.ArchiveHashes;
#endregion
#region Directory Items
/// <inheritdoc cref="Models.VPK.DirectoryItems"/>
public SabreTools.Models.VPK.DirectoryItem[] DirectoryItems => _file.DirectoryItems;
public SabreTools.Models.VPK.DirectoryItem[] DirectoryItems => _model.DirectoryItems;
#endregion
@@ -115,11 +115,6 @@ namespace BinaryObjectScanner.Wrappers
#region Instance Variables
/// <summary>
/// Internal representation of the VPK
/// </summary>
private SabreTools.Models.VPK.File _file;
/// <summary>
/// Array of archive filenames attached to the given VPK
/// </summary>
@@ -129,10 +124,27 @@ namespace BinaryObjectScanner.Wrappers
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private VPK() { }
/// <inheritdoc/>
#if NET48
public VPK(SabreTools.Models.VPK.File model, byte[] data, int offset)
#else
public VPK(SabreTools.Models.VPK.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public VPK(SabreTools.Models.VPK.File model, Stream data)
#else
public VPK(SabreTools.Models.VPK.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a VPK from a byte array and offset
@@ -170,13 +182,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new VPK
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new VPK(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -222,7 +235,7 @@ namespace BinaryObjectScanner.Wrappers
{
builder.AppendLine(" Extended Header Information:");
builder.AppendLine(" -------------------------");
if (_file.ExtendedHeader == null)
if (_model.ExtendedHeader == null)
{
builder.AppendLine(" No extended header");
}
@@ -315,7 +328,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -3,12 +3,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class WAD : WrapperBase
public class WAD : WrapperBase<SabreTools.Models.WAD.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Half-Life Texture Package File (WAD)";
public override string DescriptionString => "Half-Life Texture Package File (WAD)";
#endregion
@@ -17,27 +17,27 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.WAD.Header.Signature"/>
public string Signature => _file.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.WAD.Header.LumpCount"/>
public uint LumpCount => _file.Header.LumpCount;
public uint LumpCount => _model.Header.LumpCount;
/// <inheritdoc cref="Models.WAD.Header.LumpOffset"/>
public uint LumpOffset => _file.Header.LumpOffset;
public uint LumpOffset => _model.Header.LumpOffset;
#endregion
#region Lumps
/// <inheritdoc cref="Models.WAD.File.Lumps"/>
public SabreTools.Models.WAD.Lump[] Lumps => _file.Lumps;
public SabreTools.Models.WAD.Lump[] Lumps => _model.Lumps;
#endregion
#region Lump Infos
/// <inheritdoc cref="Models.WAD.File.LumpInfos"/>
public SabreTools.Models.WAD.LumpInfo[] LumpInfos => _file.LumpInfos;
public SabreTools.Models.WAD.LumpInfo[] LumpInfos => _model.LumpInfos;
#endregion
@@ -49,21 +49,29 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the WAD
/// </summary>
private SabreTools.Models.WAD.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private WAD() { }
/// <inheritdoc/>
#if NET48
public WAD(SabreTools.Models.WAD.File model, byte[] data, int offset)
#else
public WAD(SabreTools.Models.WAD.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public WAD(SabreTools.Models.WAD.File model, Stream data)
#else
public WAD(SabreTools.Models.WAD.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a WAD from a byte array and offset
@@ -101,13 +109,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new WAD
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new WAD(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -216,7 +225,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -7,19 +7,32 @@ using SabreTools.IO;
namespace BinaryObjectScanner.Wrappers
{
public abstract class WrapperBase
public abstract class WrapperBase<T> : IWrapper
{
#region Descriptive Properties
/// <inheritdoc/>
public string Description() => DescriptionString;
/// <summary>
/// Description of the object
/// </summary>
public abstract string Description { get; }
public abstract string DescriptionString { get; }
#endregion
#region Instance Variables
/// <summary>
/// Internal model
/// </summary>
/// <remarks>TODO: Should this have a public getter?</remarks>
#if NET48
protected T _model = default;
#else
protected T? _model = default;
#endif
/// <summary>
/// Source of the original data
/// </summary>
@@ -29,7 +42,11 @@ namespace BinaryObjectScanner.Wrappers
/// Source byte array data
/// </summary>
/// <remarks>This is only populated if <see cref="_dataSource"/> is <see cref="DataSource.ByteArray"/></remarks>
#if NET48
protected byte[] _byteArrayData = null;
#else
protected byte[]? _byteArrayData = null;
#endif
/// <summary>
/// Source byte array data offset
@@ -41,7 +58,11 @@ namespace BinaryObjectScanner.Wrappers
/// Source Stream data
/// </summary>
/// <remarks>This is only populated if <see cref="_dataSource"/> is <see cref="DataSource.Stream"/></remarks>
#if NET48
protected Stream _streamData = null;
#else
protected Stream? _streamData = null;
#endif
#if NET6_0_OR_GREATER
@@ -64,6 +85,53 @@ namespace BinaryObjectScanner.Wrappers
#endregion
#region Constructors
/// <summary>
/// Construct a new instance of the wrapper from a byte array
/// </summary>
#if NET48
protected WrapperBase(T model, byte[] data, int offset)
#else
protected WrapperBase(T? model, byte[]? data, int offset)
#endif
{
if (model == null)
throw new ArgumentNullException(nameof(model));
if (data == null)
throw new ArgumentNullException(nameof(data));
if (offset < 0 || offset >= data.Length)
throw new ArgumentOutOfRangeException(nameof(offset));
_model = model;
_dataSource = DataSource.ByteArray;
_byteArrayData = data;
_byteArrayOffset = offset;
}
/// <summary>
/// Construct a new instance of the wrapper from a Stream
/// </summary>
#if NET48
protected WrapperBase(T model, Stream data)
#else
protected WrapperBase(T? model, Stream? data)
#endif
{
if (model == null)
throw new ArgumentNullException(nameof(model));
if (data == null)
throw new ArgumentNullException(nameof(data));
if (data.Length == 0 || !data.CanSeek || !data.CanRead)
throw new ArgumentOutOfRangeException(nameof(data));
_model = model;
_dataSource = DataSource.Stream;
_streamData = data;
}
#endregion
#region Data
/// <summary>

View File

@@ -11,7 +11,7 @@ namespace BinaryObjectScanner.Wrappers
/// <summary>
/// Create an instance of a wrapper based on file type
/// </summary>
public static WrapperBase CreateWrapper(SupportedFileType fileType, Stream data)
public static IWrapper CreateWrapper(SupportedFileType fileType, Stream data)
{
switch (fileType)
{
@@ -60,10 +60,10 @@ namespace BinaryObjectScanner.Wrappers
/// </summary>
/// <param name="stream">Stream data to parse</param>
/// <returns>WrapperBase representing the executable, null on error</returns>
public static WrapperBase CreateExecutableWrapper(Stream stream)
public static IWrapper CreateExecutableWrapper(Stream stream)
{
// Try to get an MS-DOS wrapper first
WrapperBase wrapper = MSDOS.Create(stream);
IWrapper wrapper = MSDOS.Create(stream);
if (wrapper == null)
return null;

View File

@@ -4,12 +4,12 @@ using System.Text;
namespace BinaryObjectScanner.Wrappers
{
public class XZP : WrapperBase
public class XZP : WrapperBase<SabreTools.Models.XZP.File>
{
#region Descriptive Properties
/// <inheritdoc/>
public override string Description => "Xbox Package File (XZP)";
public override string DescriptionString => "Xbox Package File (XZP)";
#endregion
@@ -18,69 +18,69 @@ namespace BinaryObjectScanner.Wrappers
#region Header
/// <inheritdoc cref="Models.XZP.Header.Signature"/>
public string Signature => _file.Header.Signature;
public string Signature => _model.Header.Signature;
/// <inheritdoc cref="Models.XZP.Header.Version"/>
public uint Version => _file.Header.Version;
public uint Version => _model.Header.Version;
/// <inheritdoc cref="Models.XZP.Header.PreloadDirectoryEntryCount"/>
public uint PreloadDirectoryEntryCount => _file.Header.PreloadDirectoryEntryCount;
public uint PreloadDirectoryEntryCount => _model.Header.PreloadDirectoryEntryCount;
/// <inheritdoc cref="Models.XZP.Header.DirectoryEntryCount"/>
public uint DirectoryEntryCount => _file.Header.DirectoryEntryCount;
public uint DirectoryEntryCount => _model.Header.DirectoryEntryCount;
/// <inheritdoc cref="Models.XZP.Header.PreloadBytes"/>
public uint PreloadBytes => _file.Header.PreloadBytes;
public uint PreloadBytes => _model.Header.PreloadBytes;
/// <inheritdoc cref="Models.XZP.Header.HeaderLength"/>
public uint HeaderLength => _file.Header.HeaderLength;
public uint HeaderLength => _model.Header.HeaderLength;
/// <inheritdoc cref="Models.XZP.Header.DirectoryItemCount"/>
public uint DirectoryItemCount => _file.Header.DirectoryItemCount;
public uint DirectoryItemCount => _model.Header.DirectoryItemCount;
/// <inheritdoc cref="Models.XZP.Header.DirectoryItemOffset"/>
public uint DirectoryItemOffset => _file.Header.DirectoryItemOffset;
public uint DirectoryItemOffset => _model.Header.DirectoryItemOffset;
/// <inheritdoc cref="Models.XZP.Header.DirectoryItemLength"/>
public uint DirectoryItemLength => _file.Header.DirectoryItemLength;
public uint DirectoryItemLength => _model.Header.DirectoryItemLength;
#endregion
#region Directory Entries
/// <inheritdoc cref="Models.XZP.DirectoryEntries"/>
public SabreTools.Models.XZP.DirectoryEntry[] DirectoryEntries => _file.DirectoryEntries;
public SabreTools.Models.XZP.DirectoryEntry[] DirectoryEntries => _model.DirectoryEntries;
#endregion
#region Preload Directory Entries
/// <inheritdoc cref="Models.XZP.PreloadDirectoryEntries"/>
public SabreTools.Models.XZP.DirectoryEntry[] PreloadDirectoryEntries => _file.PreloadDirectoryEntries;
public SabreTools.Models.XZP.DirectoryEntry[] PreloadDirectoryEntries => _model.PreloadDirectoryEntries;
#endregion
#region Preload Directory Entries
/// <inheritdoc cref="Models.XZP.PreloadDirectoryMappings"/>
public SabreTools.Models.XZP.DirectoryMapping[] PreloadDirectoryMappings => _file.PreloadDirectoryMappings;
public SabreTools.Models.XZP.DirectoryMapping[] PreloadDirectoryMappings => _model.PreloadDirectoryMappings;
#endregion
#region Directory Items
/// <inheritdoc cref="Models.XZP.DirectoryItems"/>
public SabreTools.Models.XZP.DirectoryItem[] DirectoryItems => _file.DirectoryItems;
public SabreTools.Models.XZP.DirectoryItem[] DirectoryItems => _model.DirectoryItems;
#endregion
#region Footer
/// <inheritdoc cref="Models.XZP.Footer.FileLength"/>
public uint F_FileLength => _file.Footer.FileLength;
public uint F_FileLength => _model.Footer.FileLength;
/// <inheritdoc cref="Models.XZP.Footer.Signature"/>
public string F_Signature => _file.Footer.Signature;
public string F_Signature => _model.Footer.Signature;
#endregion
@@ -89,24 +89,32 @@ namespace BinaryObjectScanner.Wrappers
#region Extension Properties
// TODO: Figure out what extensions are needed
#endregion
#region Instance Variables
/// <summary>
/// Internal representation of the XZP
/// </summary>
private SabreTools.Models.XZP.File _file;
#endregion
#region Constructors
/// <summary>
/// Private constructor
/// </summary>
private XZP() { }
/// <inheritdoc/>
#if NET48
public XZP(SabreTools.Models.XZP.File model, byte[] data, int offset)
#else
public XZP(SabreTools.Models.XZP.File? model, byte[]? data, int offset)
#endif
: base(model, data, offset)
{
// All logic is handled by the base class
}
/// <inheritdoc/>
#if NET48
public XZP(SabreTools.Models.XZP.File model, Stream data)
#else
public XZP(SabreTools.Models.XZP.File? model, Stream? data)
#endif
: base(model, data)
{
// All logic is handled by the base class
}
/// <summary>
/// Create a XZP from a byte array and offset
@@ -144,13 +152,14 @@ namespace BinaryObjectScanner.Wrappers
if (file == null)
return null;
var wrapper = new XZP
try
{
_file = file,
_dataSource = DataSource.Stream,
_streamData = data,
};
return wrapper;
return new XZP(file, data);
}
catch
{
return null;
}
}
#endregion
@@ -315,7 +324,7 @@ namespace BinaryObjectScanner.Wrappers
#if NET6_0_OR_GREATER
/// <inheritdoc/>
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_file, _jsonSerializerOptions);
public override string ExportJSON() => System.Text.Json.JsonSerializer.Serialize(_model, _jsonSerializerOptions);
#endif

View File

@@ -73,7 +73,7 @@ namespace Test
}
// Print the wrapper name
Console.WriteLine($"{wrapper.Description} wrapper created successfully!");
Console.WriteLine($"{wrapper.Description()} wrapper created successfully!");
// Get the base info output name
string filenameBase = $"info-{DateTime.Now:yyyy-MM-dd_HHmmss.ffff}";