mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-07-15 13:25:05 +00:00
Make wrappers more type-defined
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
24
BinaryObjectScanner.Wrappers/IWrapper.cs
Normal file
24
BinaryObjectScanner.Wrappers/IWrapper.cs
Normal 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
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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}";
|
||||
|
||||
Reference in New Issue
Block a user