Retrofit existing printers to use extensions

This commit is contained in:
Matt Nadareski
2023-09-14 23:25:39 -04:00
parent 87961e5451
commit 91e2157622
12 changed files with 724 additions and 630 deletions

View File

@@ -1,4 +1,3 @@
using System;
using System.Text;
using SabreTools.Models.AACS;
@@ -52,7 +51,7 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Record type: {record.RecordType} (0x{record.RecordType:X})");
builder.AppendLine($" Record length: {record.RecordLength} (0x{record.RecordLength:X})");
builder.AppendLine(record.RecordLength, " Record length");
switch (record)
{
@@ -95,7 +94,7 @@ namespace BinaryObjectScanner.Printing
if (record == null)
return;
builder.AppendLine($" Signature data: {(record.SignatureData == null ? "[NULL]" : BitConverter.ToString(record.SignatureData).Replace('-', ' '))}");
builder.AppendLine(record.SignatureData, " Signature data");
}
#if NET48
@@ -107,11 +106,11 @@ namespace BinaryObjectScanner.Printing
if (record == null)
return;
builder.AppendLine($" Subset Differences:");
builder.AppendLine(" Subset Differences:");
builder.AppendLine(" -------------------------");
if (record?.SubsetDifferences == null || record.SubsetDifferences.Length == 0)
{
builder.AppendLine($" No subset differences");
builder.AppendLine(" No subset differences");
return;
}
@@ -125,8 +124,8 @@ namespace BinaryObjectScanner.Printing
}
else
{
builder.AppendLine($" Mask: {sd.Mask} (0x{sd.Mask:X})");
builder.AppendLine($" Number: {sd.Number} (0x{sd.Number:X})");
builder.AppendLine(sd.Mask, " Mask");
builder.AppendLine(sd.Number, " Number");
}
}
}
@@ -140,18 +139,18 @@ namespace BinaryObjectScanner.Printing
if (record == null)
return;
builder.AppendLine($" Media Keys:");
builder.AppendLine(" Media Keys:");
builder.AppendLine(" -------------------------");
if (record?.MediaKeyData == null || record.MediaKeyData.Length == 0)
{
builder.AppendLine($" No media keys");
builder.AppendLine(" No media keys");
return;
}
for (int j = 0; j < record.MediaKeyData.Length; j++)
{
var mk = record.MediaKeyData[j];
builder.AppendLine($" Media key {j}: {(mk == null ? "[NULL]" : BitConverter.ToString(mk).Replace('-', ' '))}");
builder.AppendLine(mk, $" Media key {j}");
}
}
@@ -165,18 +164,18 @@ namespace BinaryObjectScanner.Printing
return;
builder.AppendLine($" Span: {record.Span} (0x{record.Span:X})");
builder.AppendLine($" Offsets:");
builder.AppendLine(" Offsets:");
builder.AppendLine(" -------------------------");
if (record.Offsets == null || record.Offsets.Length == 0)
{
builder.AppendLine($" No offsets");
builder.AppendLine(" No offsets");
return;
}
for (int j = 0; j < record.Offsets.Length; j++)
{
var offset = record.Offsets[j];
builder.AppendLine($" Offset {j}: {offset} (0x{offset:X})");
builder.AppendLine(offset, $" Offset {j}");
}
}
@@ -190,7 +189,7 @@ namespace BinaryObjectScanner.Printing
return;
builder.AppendLine($" Media key block type: {record.MediaKeyBlockType} (0x{record.MediaKeyBlockType:X})");
builder.AppendLine($" Version number: {record.VersionNumber} (0x{record.VersionNumber:X})");
builder.AppendLine(record.VersionNumber, " Version number");
}
#if NET48
@@ -202,12 +201,12 @@ namespace BinaryObjectScanner.Printing
if (record == null)
return;
builder.AppendLine($" Total number of entries: {record.TotalNumberOfEntries} (0x{record.TotalNumberOfEntries:X})");
builder.AppendLine($" Signature Blocks:");
builder.AppendLine(record.TotalNumberOfEntries, " Total number of entries");
builder.AppendLine(" Signature Blocks:");
builder.AppendLine(" -------------------------");
if (record.SignatureBlocks == null || record.SignatureBlocks.Length == 0)
{
builder.AppendLine($" No signature blocks");
builder.AppendLine(" No signature blocks");
return;
}
@@ -221,12 +220,12 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Number of entries: {block.NumberOfEntries}");
builder.AppendLine($" Entry Fields:");
builder.AppendLine(block.NumberOfEntries, " Number of entries");
builder.AppendLine(" Entry Fields:");
builder.AppendLine(" -------------------------");
if (block.EntryFields == null || block.EntryFields.Length == 0)
{
builder.AppendLine($" No entry fields");
builder.AppendLine(" No entry fields");
}
else
{
@@ -240,8 +239,8 @@ namespace BinaryObjectScanner.Printing
}
else
{
builder.AppendLine($" Range: {ef.Range} (0x{ef.Range:X})");
builder.AppendLine($" Drive ID: {(ef.DriveID == null ? "[NULL]" : BitConverter.ToString(ef.DriveID).Replace('-', ' '))}");
builder.AppendLine(ef.Range, " Range");
builder.AppendLine(ef.DriveID, " Drive ID");
}
}
}
@@ -258,11 +257,11 @@ namespace BinaryObjectScanner.Printing
return;
builder.AppendLine($" Total number of entries: {record.TotalNumberOfEntries} (0x{record.TotalNumberOfEntries:X})");
builder.AppendLine($" Signature Blocks:");
builder.AppendLine(" Signature Blocks:");
builder.AppendLine(" -------------------------");
if (record.SignatureBlocks == null || record.SignatureBlocks.Length == 0)
{
builder.AppendLine($" No signature blocks");
builder.AppendLine(" No signature blocks");
return;
}
@@ -276,12 +275,12 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Number of entries: {block.NumberOfEntries}");
builder.AppendLine($" Entry Fields:");
builder.AppendLine(block.NumberOfEntries, " Number of entries");
builder.AppendLine(" Entry Fields:");
builder.AppendLine(" -------------------------");
if (block.EntryFields == null || block.EntryFields.Length == 0)
{
builder.AppendLine($" No entry fields");
builder.AppendLine(" No entry fields");
continue;
}
@@ -296,8 +295,8 @@ namespace BinaryObjectScanner.Printing
else
{
builder.AppendLine($" Range: {ef.Range} (0x{ef.Range:X})");
builder.AppendLine($" Host ID: {(ef.HostID == null ? "[NULL]" : BitConverter.ToString(ef.HostID).Replace('-', ' '))}");
builder.AppendLine(ef.Range, " Range");
builder.AppendLine(ef.HostID, " Host ID");
}
}
}
@@ -312,7 +311,7 @@ namespace BinaryObjectScanner.Printing
if (record == null)
return;
builder.AppendLine($" Ciphertext value: {(record.CiphertextValue == null ? "[NULL]" : BitConverter.ToString(record.CiphertextValue).Replace('-', ' '))}");
builder.AppendLine(record.CiphertextValue, " Ciphertext value");
}
#if NET48
@@ -324,7 +323,7 @@ namespace BinaryObjectScanner.Printing
if (record == null)
return;
builder.AppendLine($" Copyright: {record.Copyright ?? "[NULL]"}");
builder.AppendLine(record.Copyright, " Copyright");
}
}
}

View File

@@ -1,4 +1,3 @@
using System;
using System.Text;
using SabreTools.Models.BDPlus;
@@ -10,14 +9,14 @@ namespace BinaryObjectScanner.Printing
{
builder.AppendLine("BD+ SVM Information:");
builder.AppendLine("-------------------------");
builder.AppendLine($"Signature: {svm.Signature}");
builder.AppendLine($"Unknown 1: {(svm.Unknown1 == null ? "[NULL]" : BitConverter.ToString(svm.Unknown1).Replace('-', ' '))}");
builder.AppendLine($"Year: {svm.Year} (0x{svm.Year:X})");
builder.AppendLine($"Month: {svm.Month} (0x{svm.Month:X})");
builder.AppendLine($"Day: {svm.Day} (0x{svm.Day:X})");
builder.AppendLine($"Unknown 2: {(svm.Unknown2 == null ? "[NULL]" : BitConverter.ToString(svm.Unknown2).Replace('-', ' '))}");
builder.AppendLine($"Length: {svm.Length} (0x{svm.Length:X})");
//builder.AppendLine($" Data: {(svm.Data == null ? "[NULL]" : BitConverter.ToString(svm.Data).Replace('-', ' '))}");
builder.AppendLine(svm.Signature, "Signature");
builder.AppendLine(svm.Unknown1, "Unknown 1");
builder.AppendLine(svm.Year, "Year");
builder.AppendLine(svm.Month, "Month");
builder.AppendLine(svm.Day, "Day");
builder.AppendLine(svm.Unknown2, "Unknown 2");
builder.AppendLine(svm.Length, "Length");
//builder.AppendLine(svm.Data, "Data");
builder.AppendLine();
}
}

View File

@@ -30,9 +30,9 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Magic: {header.Magic}");
builder.AppendLine($" Version: {header.Version} (0x{header.Version:X})");
builder.AppendLine($" Files: {header.Files} (0x{header.Files:X})");
builder.AppendLine(header.Magic, " Magic");
builder.AppendLine(header.Version, " Version");
builder.AppendLine(header.Files, " Files");
builder.AppendLine();
}
@@ -60,11 +60,11 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Name size: {entry.NameSize} (0x{entry.NameSize:X})");
builder.AppendLine($" Name: {entry.Name}");
builder.AppendLine($" Uncompressed size: {entry.UncompressedSize} (0x{entry.UncompressedSize:X})");
builder.AppendLine($" Offset: {entry.Offset} (0x{entry.Offset:X})");
builder.AppendLine($" Compressed Size: {entry.CompressedSize} (0x{entry.CompressedSize:X})");
builder.AppendLine(entry.NameSize, " Name size");
builder.AppendLine(entry.Name, " Name");
builder.AppendLine(entry.UncompressedSize, " Uncompressed size");
builder.AppendLine(entry.Offset, " Offset");
builder.AppendLine(entry.CompressedSize, " Compressed size");
}
}
}

View File

@@ -33,7 +33,7 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Version: {header.Version} (0x{header.Version:X})");
builder.AppendLine(header.Version, " Version");
builder.AppendLine();
}
@@ -73,8 +73,8 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Offset: {lump.Offset} (0x{lump.Offset:X})");
builder.AppendLine($" Length: {lump.Length} (0x{lump.Length:X})");
builder.AppendLine(lump.Offset, " Offset");
builder.AppendLine(lump.Length, " Length");
}
builder.AppendLine();
}
@@ -94,8 +94,8 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Texture count: {header.TextureCount}");
builder.AppendLine($" Offsets:");
builder.AppendLine(header.TextureCount, " Texture count");
builder.AppendLine(" Offsets:");
if (header.Offsets == null || header.Offsets.Length == 0)
{
builder.AppendLine(" No offsets");
@@ -105,7 +105,7 @@ namespace BinaryObjectScanner.Printing
for (int i = 0; i < header.Offsets.Length; i++)
{
builder.AppendLine($" Offset {i}: {header.Offsets[i]} (0x{header.Offsets[i]:X})");
builder.AppendLine(header.Offsets[i], $" Offset {i}");
}
builder.AppendLine();
}
@@ -135,24 +135,24 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Name: {texture.Name}");
builder.AppendLine($" Width: {texture.Width} (0x{texture.Width:X})");
builder.AppendLine($" Height: {texture.Height} (0x{texture.Height:X})");
builder.AppendLine($" Offsets:");
builder.AppendLine(texture.Name, " Name");
builder.AppendLine(texture.Width, " Width");
builder.AppendLine(texture.Height, " Height");
builder.AppendLine(" Offsets:");
if (texture.Offsets == null || texture.Offsets.Length == 0)
{
builder.AppendLine($" No offsets");
builder.AppendLine(" No offsets");
continue;
}
else
{
for (int j = 0; j < texture.Offsets.Length; j++)
{
builder.AppendLine($" Offset {j}: {texture.Offsets[i]} (0x{texture.Offsets[j]:X})");
builder.AppendLine(texture.Offsets[i], $" Offset {j}");
}
}
// Skip texture data
builder.AppendLine($" Palette size: {texture.PaletteSize} (0x{texture.PaletteSize:X})");
builder.AppendLine(texture.PaletteSize, " Palette size");
// Skip palette data
}
builder.AppendLine();

View File

@@ -33,24 +33,24 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Signature: {header.Signature} (0x{header.Signature:X})");
builder.AppendLine($" CLSID: {header.CLSID}");
builder.AppendLine($" Minor version: {header.MinorVersion} (0x{header.MinorVersion:X})");
builder.AppendLine($" Major version: {header.MajorVersion} (0x{header.MajorVersion:X})");
builder.AppendLine($" Byte order: {header.ByteOrder} (0x{header.ByteOrder:X})");
builder.AppendLine(header.Signature, " Signature");
builder.AppendLine(header.CLSID, " CLSID");
builder.AppendLine(header.MinorVersion, " Minor version");
builder.AppendLine(header.MajorVersion, " Major version");
builder.AppendLine(header.ByteOrder, " Byte order");
builder.AppendLine($" Sector shift: {header.SectorShift} (0x{header.SectorShift:X}) => {Math.Pow(2, header.SectorShift)}");
builder.AppendLine($" Mini sector shift: {header.MiniSectorShift} (0x{header.MiniSectorShift:X}) => {Math.Pow(2, header.MiniSectorShift)}");
builder.AppendLine($" Reserved: {(header.Reserved == null ? "[NULL]" : BitConverter.ToString(header.Reserved).Replace('-', ' '))}");
builder.AppendLine($" Number of directory sectors: {header.NumberOfDirectorySectors} (0x{header.NumberOfDirectorySectors:X})");
builder.AppendLine($" Number of FAT sectors: {header.NumberOfFATSectors} (0x{header.NumberOfFATSectors:X})");
builder.AppendLine($" First directory sector location: {header.FirstDirectorySectorLocation} (0x{header.FirstDirectorySectorLocation:X})");
builder.AppendLine($" Transaction signature number: {header.TransactionSignatureNumber} (0x{header.TransactionSignatureNumber:X})");
builder.AppendLine($" Mini stream cutoff size: {header.MiniStreamCutoffSize} (0x{header.MiniStreamCutoffSize:X})");
builder.AppendLine($" First mini FAT sector location: {header.FirstMiniFATSectorLocation} (0x{header.FirstMiniFATSectorLocation:X})");
builder.AppendLine($" Number of mini FAT sectors: {header.NumberOfMiniFATSectors} (0x{header.NumberOfMiniFATSectors:X})");
builder.AppendLine($" First DIFAT sector location: {header.FirstDIFATSectorLocation} (0x{header.FirstDIFATSectorLocation:X})");
builder.AppendLine($" Number of DIFAT sectors: {header.NumberOfDIFATSectors} (0x{header.NumberOfDIFATSectors:X})");
builder.AppendLine($" DIFAT:");
builder.AppendLine(header.Reserved, " Reserved");
builder.AppendLine(header.NumberOfDirectorySectors, " Number of directory sectors");
builder.AppendLine(header.NumberOfFATSectors, " Number of FAT sectors");
builder.AppendLine(header.FirstDirectorySectorLocation, " First directory sector location");
builder.AppendLine(header.TransactionSignatureNumber, " Transaction signature number");
builder.AppendLine(header.MiniStreamCutoffSize, " Mini stream cutoff size");
builder.AppendLine(header.FirstMiniFATSectorLocation, " First mini FAT sector location");
builder.AppendLine(header.NumberOfMiniFATSectors, " Number of mini FAT sectors");
builder.AppendLine(header.FirstDIFATSectorLocation, " First DIFAT sector location");
builder.AppendLine(header.NumberOfDIFATSectors, " Number of DIFAT sectors");
builder.AppendLine(" DIFAT:");
if (header.DIFAT == null || header.DIFAT.Length == 0)
{
builder.AppendLine(" No DIFAT entries");
@@ -112,19 +112,19 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Name: {directoryEntry.Name}");
builder.AppendLine($" Name length: {directoryEntry.NameLength} (0x{directoryEntry.NameLength:X})");
builder.AppendLine(directoryEntry.Name, " Name");
builder.AppendLine(directoryEntry.NameLength, " Name length");
builder.AppendLine($" Object type: {directoryEntry.ObjectType} (0x{directoryEntry.ObjectType:X})");
builder.AppendLine($" Color flag: {directoryEntry.ColorFlag} (0x{directoryEntry.ColorFlag:X})");
builder.AppendLine($" Left sibling ID: {directoryEntry.LeftSiblingID} (0x{directoryEntry.LeftSiblingID:X})");
builder.AppendLine($" Right sibling ID: {directoryEntry.RightSiblingID} (0x{directoryEntry.RightSiblingID:X})");
builder.AppendLine($" Child ID: {directoryEntry.ChildID} (0x{directoryEntry.ChildID:X})");
builder.AppendLine($" CLSID: {directoryEntry.CLSID}");
builder.AppendLine($" State bits: {directoryEntry.StateBits} (0x{directoryEntry.StateBits:X})");
builder.AppendLine($" Creation time: {directoryEntry.CreationTime} (0x{directoryEntry.CreationTime:X})");
builder.AppendLine($" Modification time: {directoryEntry.ModifiedTime} (0x{directoryEntry.ModifiedTime:X})");
builder.AppendLine($" Staring sector location: {directoryEntry.StartingSectorLocation} (0x{directoryEntry.StartingSectorLocation:X})");
builder.AppendLine($" Stream size: {directoryEntry.StreamSize} (0x{directoryEntry.StreamSize:X})");
builder.AppendLine(directoryEntry.CLSID, " CLSID");
builder.AppendLine(directoryEntry.StateBits, " State bits");
builder.AppendLine(directoryEntry.CreationTime, " Creation time");
builder.AppendLine(directoryEntry.ModifiedTime, " Modification time");
builder.AppendLine(directoryEntry.StartingSectorLocation, " Staring sector location");
builder.AppendLine(directoryEntry.StreamSize, " Stream size");
}
builder.AppendLine();
}

View File

@@ -1,4 +1,3 @@
using System;
using System.Text;
using SabreTools.Models.N3DS;
@@ -35,15 +34,15 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Header size: {header.HeaderSize} (0x{header.HeaderSize:X})");
builder.AppendLine($" Type: {header.Type} (0x{header.Type:X})");
builder.AppendLine($" Version: {header.Version} (0x{header.Version:X})");
builder.AppendLine($" Certificate chain size: {header.CertificateChainSize} (0x{header.CertificateChainSize:X})");
builder.AppendLine($" Ticket size: {header.TicketSize} (0x{header.TicketSize:X})");
builder.AppendLine($" TMD file size: {header.TMDFileSize} (0x{header.TMDFileSize:X})");
builder.AppendLine($" Meta size: {header.MetaSize} (0x{header.MetaSize:X})");
builder.AppendLine($" Content size: {header.ContentSize} (0x{header.ContentSize:X})");
builder.AppendLine($" Content index: {(header.ContentIndex == null ? "[NULL]" : BitConverter.ToString(header.ContentIndex).Replace('-', ' '))}");
builder.AppendLine(header.HeaderSize, " Header size");
builder.AppendLine(header.Type, " Type");
builder.AppendLine(header.Version, " Version");
builder.AppendLine(header.CertificateChainSize, " Certificate chain size");
builder.AppendLine(header.TicketSize, " Ticket size");
builder.AppendLine(header.TMDFileSize, " TMD file size");
builder.AppendLine(header.MetaSize, " Meta size");
builder.AppendLine(header.ContentSize, " Content size");
builder.AppendLine(header.ContentIndex, " Content index");
builder.AppendLine();
}
@@ -82,25 +81,25 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Signature type: {certificate.SignatureType} (0x{certificate.SignatureType:X})");
builder.AppendLine($" Signature size: {certificate.SignatureSize} (0x{certificate.SignatureSize:X})");
builder.AppendLine($" Padding size: {certificate.PaddingSize} (0x{certificate.PaddingSize:X})");
builder.AppendLine($" Signature: {(certificate.Signature == null ? "[NULL]" : BitConverter.ToString(certificate.Signature).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(certificate.Padding == null ? "[NULL]" : BitConverter.ToString(certificate.Padding).Replace('-', ' '))}");
builder.AppendLine($" Issuer: {certificate.Issuer ?? "[NULL]"}");
builder.AppendLine(certificate.SignatureSize, " Signature size");
builder.AppendLine(certificate.PaddingSize, " Padding size");
builder.AppendLine(certificate.Signature, " Signature");
builder.AppendLine(certificate.Padding, " Padding");
builder.AppendLine(certificate.Issuer, " Issuer");
builder.AppendLine($" Key type: {certificate.KeyType} (0x{certificate.KeyType:X})");
builder.AppendLine($" Name: {certificate.Name ?? "[NULL]"}");
builder.AppendLine($" Expiration time: {certificate.ExpirationTime} (0x{certificate.ExpirationTime:X})");
builder.AppendLine(certificate.Name, " Name");
builder.AppendLine(certificate.ExpirationTime, " Expiration time");
switch (certificate.KeyType)
{
case PublicKeyType.RSA_4096:
case PublicKeyType.RSA_2048:
builder.AppendLine($" Modulus: {(certificate.RSAModulus == null ? "[NULL]" : BitConverter.ToString(certificate.RSAModulus).Replace('-', ' '))}");
builder.AppendLine($" Public exponent: {certificate.RSAPublicExponent} (0x{certificate.RSAPublicExponent:X})");
builder.AppendLine($" Padding: {(certificate.RSAPadding == null ? "[NULL]" : BitConverter.ToString(certificate.RSAPadding).Replace('-', ' '))}");
builder.AppendLine(certificate.RSAModulus, " Modulus");
builder.AppendLine(certificate.RSAPublicExponent, " Public exponent");
builder.AppendLine(certificate.RSAPadding, " Padding");
break;
case PublicKeyType.EllipticCurve:
builder.AppendLine($" Public key: {(certificate.ECCPublicKey == null ? "[NULL]" : BitConverter.ToString(certificate.ECCPublicKey).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(certificate.ECCPadding == null ? "[NULL]" : BitConverter.ToString(certificate.ECCPadding).Replace('-', ' '))}");
builder.AppendLine(certificate.ECCPublicKey, " Public key");
builder.AppendLine(certificate.ECCPadding, " Padding");
break;
}
}
@@ -123,31 +122,31 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Signature type: {ticket.SignatureType} (0x{ticket.SignatureType:X})");
builder.AppendLine($" Signature size: {ticket.SignatureSize} (0x{ticket.SignatureSize:X})");
builder.AppendLine($" Padding size: {ticket.PaddingSize} (0x{ticket.PaddingSize:X})");
builder.AppendLine($" Signature: {(ticket.Signature == null ? "[NULL]" : BitConverter.ToString(ticket.Signature).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(ticket.Padding == null ? "[NULL]" : BitConverter.ToString(ticket.Padding).Replace('-', ' '))}");
builder.AppendLine($" Issuer: {ticket.Issuer ?? "[NULL]"}");
builder.AppendLine($" ECC public key: {(ticket.ECCPublicKey == null ? "[NULL]" : BitConverter.ToString(ticket.ECCPublicKey).Replace('-', ' '))}");
builder.AppendLine($" Version: {ticket.Version} (0x{ticket.Version:X})");
builder.AppendLine($" CaCrlVersion: {ticket.CaCrlVersion} (0x{ticket.CaCrlVersion:X})");
builder.AppendLine($" SignerCrlVersion: {ticket.SignerCrlVersion} (0x{ticket.SignerCrlVersion:X})");
builder.AppendLine($" Title key: {(ticket.TitleKey == null ? "[NULL]" : BitConverter.ToString(ticket.TitleKey).Replace('-', ' '))}");
builder.AppendLine($" Reserved 1: {ticket.Reserved1} (0x{ticket.Reserved1:X})");
builder.AppendLine($" Ticket ID: {ticket.TicketID} (0x{ticket.TicketID:X})");
builder.AppendLine($" Console ID: {ticket.ConsoleID} (0x{ticket.ConsoleID:X})");
builder.AppendLine($" Title ID {ticket.TitleID} (0x{ticket.TitleID:X})");
builder.AppendLine($" Reserved 2: {(ticket.Reserved2 == null ? "[NULL]" : BitConverter.ToString(ticket.Reserved2).Replace('-', ' '))}");
builder.AppendLine($" Ticket title version: {ticket.TicketTitleVersion} (0x{ticket.TicketTitleVersion:X})");
builder.AppendLine($" Reserved 3: {(ticket.Reserved3 == null ? "[NULL]" : BitConverter.ToString(ticket.Reserved3).Replace('-', ' '))}");
builder.AppendLine($" License type: {ticket.LicenseType} (0x{ticket.LicenseType:X})");
builder.AppendLine($" Common keY index: {ticket.CommonKeyYIndex} (0x{ticket.CommonKeyYIndex:X})");
builder.AppendLine($" Reserved 4: {(ticket.Reserved4 == null ? "[NULL]" : BitConverter.ToString(ticket.Reserved4).Replace('-', ' '))}");
builder.AppendLine($" eShop Account ID?: {ticket.eShopAccountID} (0x{ticket.eShopAccountID:X})");
builder.AppendLine($" Reserved 5: {ticket.Reserved5} (0x{ticket.Reserved5:X})");
builder.AppendLine($" Audit: {ticket.Audit} (0x{ticket.Audit:X})");
builder.AppendLine($" Reserved 6: {(ticket.Reserved6 == null ? "[NULL]" : BitConverter.ToString(ticket.Reserved6).Replace('-', ' '))}");
builder.AppendLine($" Limits:");
builder.AppendLine(ticket.SignatureSize, " Signature size");
builder.AppendLine(ticket.PaddingSize, " Padding size");
builder.AppendLine(ticket.Signature, " Signature");
builder.AppendLine(ticket.Padding, " Padding");
builder.AppendLine(ticket.Issuer, " Issuer");
builder.AppendLine(ticket.ECCPublicKey, " ECC public key");
builder.AppendLine(ticket.Version, " Version");
builder.AppendLine(ticket.CaCrlVersion, " CaCrlVersion");
builder.AppendLine(ticket.SignerCrlVersion, " SignerCrlVersion");
builder.AppendLine(ticket.TitleKey, " Title key");
builder.AppendLine(ticket.Reserved1, " Reserved 1");
builder.AppendLine(ticket.TicketID, " Ticket ID");
builder.AppendLine(ticket.ConsoleID, " Console ID");
builder.AppendLine(ticket.TitleID, " Title ID");
builder.AppendLine(ticket.Reserved2, " Reserved 2");
builder.AppendLine(ticket.TicketTitleVersion, " Ticket title version");
builder.AppendLine(ticket.Reserved3, " Reserved 3");
builder.AppendLine(ticket.LicenseType, " License type");
builder.AppendLine(ticket.CommonKeyYIndex, " Common key Y index");
builder.AppendLine(ticket.Reserved4, " Reserved 4");
builder.AppendLine(ticket.eShopAccountID, " eShop Account ID");
builder.AppendLine(ticket.Reserved5, " Reserved 5");
builder.AppendLine(ticket.Audit, " Audit");
builder.AppendLine(ticket.Reserved6, " Reserved 6");
builder.AppendLine(" Limits:");
if (ticket.Limits == null || ticket.Limits.Length == 0)
{
builder.AppendLine(" No limits");
@@ -156,11 +155,11 @@ namespace BinaryObjectScanner.Printing
{
for (int i = 0; i < ticket.Limits.Length; i++)
{
builder.AppendLine($" Limit {i}: {ticket.Limits[i]} (0x{ticket.Limits[i]:X})");
builder.AppendLine(ticket.Limits[i], $" Limit {i}");
}
}
builder.AppendLine($" Content index size: {ticket.ContentIndexSize} (0x{ticket.ContentIndexSize:X})");
builder.AppendLine($" Content index: {(ticket.ContentIndex == null ? "[NULL]" : BitConverter.ToString(ticket.ContentIndex).Replace('-', ' '))}");
builder.AppendLine(ticket.ContentIndexSize, " Content index size");
builder.AppendLine(ticket.ContentIndex, " Content index");
builder.AppendLine();
builder.AppendLine(" Ticket Certificate Chain Information:");
@@ -190,25 +189,25 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Signature type: {certificate.SignatureType} (0x{certificate.SignatureType:X})");
builder.AppendLine($" Signature size: {certificate.SignatureSize} (0x{certificate.SignatureSize:X})");
builder.AppendLine($" Padding size: {certificate.PaddingSize} (0x{certificate.PaddingSize:X})");
builder.AppendLine($" Signature: {(certificate.Signature == null ? "[NULL]" : BitConverter.ToString(certificate.Signature).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(certificate.Padding == null ? "[NULL]" : BitConverter.ToString(certificate.Padding).Replace('-', ' '))}");
builder.AppendLine($" Issuer: {certificate.Issuer ?? "[NULL]"}");
builder.AppendLine(certificate.SignatureSize, " Signature size");
builder.AppendLine(certificate.PaddingSize, " Padding size");
builder.AppendLine(certificate.Signature, " Signature");
builder.AppendLine(certificate.Padding, " Padding");
builder.AppendLine(certificate.Issuer, " Issuer");
builder.AppendLine($" Key type: {certificate.KeyType} (0x{certificate.KeyType:X})");
builder.AppendLine($" Name: {certificate.Name ?? "[NULL]"}");
builder.AppendLine($" Expiration time: {certificate.ExpirationTime} (0x{certificate.ExpirationTime:X})");
builder.AppendLine(certificate.Name, " Name");
builder.AppendLine(certificate.ExpirationTime, " Expiration time");
switch (certificate.KeyType)
{
case PublicKeyType.RSA_4096:
case PublicKeyType.RSA_2048:
builder.AppendLine($" Modulus: {(certificate.RSAModulus == null ? "[NULL]" : BitConverter.ToString(certificate.RSAModulus).Replace('-', ' '))}");
builder.AppendLine($" Public exponent: {certificate.RSAPublicExponent} (0x{certificate.RSAPublicExponent:X})");
builder.AppendLine($" Padding: {(certificate.RSAPadding == null ? "[NULL]" : BitConverter.ToString(certificate.RSAPadding).Replace('-', ' '))}");
builder.AppendLine(certificate.RSAModulus, " Modulus");
builder.AppendLine(certificate.RSAPublicExponent, " Public exponent");
builder.AppendLine(certificate.RSAPadding, " Padding");
break;
case PublicKeyType.EllipticCurve:
builder.AppendLine($" Public key: {(certificate.ECCPublicKey == null ? "[NULL]" : BitConverter.ToString(certificate.ECCPublicKey).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(certificate.ECCPadding == null ? "[NULL]" : BitConverter.ToString(certificate.ECCPadding).Replace('-', ' '))}");
builder.AppendLine(certificate.ECCPublicKey, " Public key");
builder.AppendLine(certificate.ECCPadding, " Padding");
break;
}
}
@@ -232,30 +231,30 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Signature type: {tmd.SignatureType} (0x{tmd.SignatureType:X})");
builder.AppendLine($" Signature size: {tmd.SignatureSize} (0x{tmd.SignatureSize:X})");
builder.AppendLine($" Padding size: {tmd.PaddingSize} (0x{tmd.PaddingSize:X})");
builder.AppendLine($" Signature: {(tmd.Signature == null ? "[NULL]" : BitConverter.ToString(tmd.Signature).Replace('-', ' '))}");
builder.AppendLine($" Padding 1: {(tmd.Padding1 == null ? "[NULL]" : BitConverter.ToString(tmd.Padding1).Replace('-', ' '))}");
builder.AppendLine($" Issuer: {tmd.Issuer ?? "[NULL]"}");
builder.AppendLine($" Version: {tmd.Version} (0x{tmd.Version:X})");
builder.AppendLine($" CaCrlVersion: {tmd.CaCrlVersion} (0x{tmd.CaCrlVersion:X})");
builder.AppendLine($" SignerCrlVersion: {tmd.SignerCrlVersion} (0x{tmd.SignerCrlVersion:X})");
builder.AppendLine($" Reserved 1: {tmd.Reserved1} (0x{tmd.Reserved1:X})");
builder.AppendLine($" System version: {tmd.SystemVersion} (0x{tmd.SystemVersion:X})");
builder.AppendLine($" Title ID: {tmd.TitleID} (0x{tmd.TitleID:X})");
builder.AppendLine($" Title type: {tmd.TitleType} (0x{tmd.TitleType:X})");
builder.AppendLine($" Group ID: {tmd.GroupID} (0x{tmd.GroupID:X})");
builder.AppendLine($" Save data size: {tmd.SaveDataSize} (0x{tmd.SaveDataSize:X})");
builder.AppendLine($" SRL private save data size: {tmd.SRLPrivateSaveDataSize} (0x{tmd.SRLPrivateSaveDataSize:X})");
builder.AppendLine($" Reserved 2: {(tmd.Reserved2 == null ? "[NULL]" : BitConverter.ToString(tmd.Reserved2).Replace('-', ' '))}");
builder.AppendLine($" SRL flag: {tmd.SRLFlag} (0x{tmd.SRLFlag:X})");
builder.AppendLine($" Reserved 3: {(tmd.Reserved3 == null ? "[NULL]" : BitConverter.ToString(tmd.Reserved3).Replace('-', ' '))}");
builder.AppendLine($" Access rights: {tmd.AccessRights} (0x{tmd.AccessRights:X})");
builder.AppendLine($" Title version: {tmd.TitleVersion} (0x{tmd.TitleVersion:X})");
builder.AppendLine($" Content count: {tmd.ContentCount} (0x{tmd.ContentCount:X})");
builder.AppendLine($" Boot content: {tmd.BootContent} (0x{tmd.BootContent:X})");
builder.AppendLine($" Padding 2: {(tmd.Padding2 == null ? "[NULL]" : BitConverter.ToString(tmd.Padding2).Replace('-', ' '))}");
builder.AppendLine($" SHA-256 hash of the content info records: {(tmd.SHA256HashContentInfoRecords == null ? "[NULL]" : BitConverter.ToString(tmd.SHA256HashContentInfoRecords).Replace('-', ' '))}");
builder.AppendLine(tmd.SignatureSize, " Signature size");
builder.AppendLine(tmd.PaddingSize, " Padding size");
builder.AppendLine(tmd.Signature, " Signature");
builder.AppendLine(tmd.Padding1, " Padding 1");
builder.AppendLine(tmd.Issuer, " Issuer");
builder.AppendLine(tmd.Version, " Version");
builder.AppendLine(tmd.CaCrlVersion, " CaCrlVersion");
builder.AppendLine(tmd.SignerCrlVersion, " SignerCrlVersion");
builder.AppendLine(tmd.Reserved1, " Reserved 1");
builder.AppendLine(tmd.SystemVersion, " System version");
builder.AppendLine(tmd.TitleID, " Title ID");
builder.AppendLine(tmd.TitleType, " Title type");
builder.AppendLine(tmd.GroupID, " Group ID");
builder.AppendLine(tmd.SaveDataSize, " Save data size");
builder.AppendLine(tmd.SRLPrivateSaveDataSize, " SRL private save data size");
builder.AppendLine(tmd.Reserved2, " Reserved 2");
builder.AppendLine(tmd.SRLFlag, " SRL flag");
builder.AppendLine(tmd.Reserved3, " Reserved 3");
builder.AppendLine(tmd.AccessRights, " Access rights");
builder.AppendLine(tmd.TitleVersion, " Title version");
builder.AppendLine(tmd.ContentCount, " Content count");
builder.AppendLine(tmd.BootContent, " Boot content");
builder.AppendLine(tmd.Padding2, " Padding 2");
builder.AppendLine(tmd.SHA256HashContentInfoRecords, " SHA-256 hash of the content info records");
builder.AppendLine();
builder.AppendLine(" Ticket Content Info Records Information:");
@@ -276,9 +275,9 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Content index offset: {contentInfoRecord.ContentIndexOffset} (0x{contentInfoRecord.ContentIndexOffset:X})");
builder.AppendLine($" Content command count: {contentInfoRecord.ContentCommandCount} (0x{contentInfoRecord.ContentCommandCount:X})");
builder.AppendLine($" SHA-256 hash of the next {contentInfoRecord.ContentCommandCount} records not hashed: {(contentInfoRecord.UnhashedContentRecordsSHA256Hash == null ? "[NULL]" : BitConverter.ToString(contentInfoRecord.UnhashedContentRecordsSHA256Hash).Replace('-', ' '))}");
builder.AppendLine(contentInfoRecord.ContentIndexOffset, " Content index offset");
builder.AppendLine(contentInfoRecord.ContentCommandCount, " Content command count");
builder.AppendLine(contentInfoRecord.UnhashedContentRecordsSHA256Hash, $" SHA-256 hash of the next {contentInfoRecord.ContentCommandCount} records not hashed");
}
}
builder.AppendLine();
@@ -301,11 +300,11 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Content ID: {contentChunkRecord.ContentId} (0x{contentChunkRecord.ContentId:X})");
builder.AppendLine(contentChunkRecord.ContentId, " Content ID");
builder.AppendLine($" Content index: {contentChunkRecord.ContentIndex} (0x{contentChunkRecord.ContentIndex:X})");
builder.AppendLine($" Content type: {contentChunkRecord.ContentType} (0x{contentChunkRecord.ContentType:X})");
builder.AppendLine($" Content size: {contentChunkRecord.ContentSize} (0x{contentChunkRecord.ContentSize:X})");
builder.AppendLine($" SHA-256 hash: {(contentChunkRecord.SHA256Hash == null ? "[NULL]" : BitConverter.ToString(contentChunkRecord.SHA256Hash).Replace('-', ' '))}");
builder.AppendLine(contentChunkRecord.ContentSize, " Content size");
builder.AppendLine(contentChunkRecord.SHA256Hash, " SHA-256 hash");
}
}
builder.AppendLine();
@@ -337,25 +336,25 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Signature type: {certificate.SignatureType} (0x{certificate.SignatureType:X})");
builder.AppendLine($" Signature size: {certificate.SignatureSize} (0x{certificate.SignatureSize:X})");
builder.AppendLine($" Padding size: {certificate.PaddingSize} (0x{certificate.PaddingSize:X})");
builder.AppendLine($" Signature: {(certificate.Signature == null ? "[NULL]" : BitConverter.ToString(certificate.Signature).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(certificate.Padding == null ? "[NULL]" : BitConverter.ToString(certificate.Padding).Replace('-', ' '))}");
builder.AppendLine($" Issuer: {certificate.Issuer ?? "[NULL]"}");
builder.AppendLine(certificate.SignatureSize, " Signature size");
builder.AppendLine(certificate.PaddingSize, " Padding size");
builder.AppendLine(certificate.Signature, " Signature");
builder.AppendLine(certificate.Padding, " Padding");
builder.AppendLine(certificate.Issuer, " Issuer");
builder.AppendLine($" Key type: {certificate.KeyType} (0x{certificate.KeyType:X})");
builder.AppendLine($" Name: {certificate.Name ?? "[NULL]"}");
builder.AppendLine($" Expiration time: {certificate.ExpirationTime} (0x{certificate.ExpirationTime:X})");
builder.AppendLine(certificate.Name, " Name");
builder.AppendLine(certificate.ExpirationTime, " Expiration time");
switch (certificate.KeyType)
{
case PublicKeyType.RSA_4096:
case PublicKeyType.RSA_2048:
builder.AppendLine($" Modulus: {(certificate.RSAModulus == null ? "[NULL]" : BitConverter.ToString(certificate.RSAModulus).Replace('-', ' '))}");
builder.AppendLine($" Public exponent: {certificate.RSAPublicExponent} (0x{certificate.RSAPublicExponent:X})");
builder.AppendLine($" Padding: {(certificate.RSAPadding == null ? "[NULL]" : BitConverter.ToString(certificate.RSAPadding).Replace('-', ' '))}");
builder.AppendLine(certificate.RSAModulus, " Modulus");
builder.AppendLine(certificate.RSAPublicExponent, " Public exponent");
builder.AppendLine(certificate.RSAPadding, " Padding");
break;
case PublicKeyType.EllipticCurve:
builder.AppendLine($" Public key: {(certificate.ECCPublicKey == null ? "[NULL]" : BitConverter.ToString(certificate.ECCPublicKey).Replace('-', ' '))}");
builder.AppendLine($" Padding: {(certificate.ECCPadding == null ? "[NULL]" : BitConverter.ToString(certificate.ECCPadding).Replace('-', ' '))}");
builder.AppendLine(certificate.ECCPublicKey, " Public key");
builder.AppendLine(certificate.ECCPadding, " Padding");
break;
}
}
@@ -390,29 +389,29 @@ namespace BinaryObjectScanner.Printing
if (partitionHeader.MagicID == string.Empty)
{
builder.AppendLine($" Empty partition, no data can be parsed");
builder.AppendLine(" Empty partition, no data can be parsed");
continue;
}
else if (partitionHeader.MagicID != Constants.NCCHMagicNumber)
{
builder.AppendLine($" Unrecognized partition data, no data can be parsed");
builder.AppendLine(" Unrecognized partition data, no data can be parsed");
continue;
}
builder.AppendLine($" RSA-2048 SHA-256 signature: {(partitionHeader.RSA2048Signature == null ? "[NULL]" : BitConverter.ToString(partitionHeader.RSA2048Signature).Replace('-', ' '))}");
builder.AppendLine($" Magic ID: {partitionHeader.MagicID} (0x{partitionHeader.MagicID:X})");
builder.AppendLine($" Content size in media units: {partitionHeader.ContentSizeInMediaUnits} (0x{partitionHeader.ContentSizeInMediaUnits:X})");
builder.AppendLine($" Partition ID: {partitionHeader.PartitionId} (0x{partitionHeader.PartitionId:X})");
builder.AppendLine($" Maker code: {partitionHeader.MakerCode} (0x{partitionHeader.MakerCode:X})");
builder.AppendLine($" Version: {partitionHeader.Version} (0x{partitionHeader.Version:X})");
builder.AppendLine($" Verification hash: {partitionHeader.VerificationHash} (0x{partitionHeader.VerificationHash:X})");
builder.AppendLine($" Program ID: {(partitionHeader.ProgramId == null ? "[NULL]" : BitConverter.ToString(partitionHeader.ProgramId).Replace('-', ' '))}");
builder.AppendLine($" Reserved 1: {(partitionHeader.Reserved1 == null ? "[NULL]" : BitConverter.ToString(partitionHeader.Reserved1).Replace('-', ' '))}");
builder.AppendLine($" Logo region SHA-256 hash: {(partitionHeader.LogoRegionHash == null ? "[NULL]" : BitConverter.ToString(partitionHeader.LogoRegionHash).Replace('-', ' '))}");
builder.AppendLine($" Product code: {partitionHeader.ProductCode} (0x{partitionHeader.ProductCode:X})");
builder.AppendLine($" Extended header SHA-256 hash: {(partitionHeader.ExtendedHeaderHash == null ? "[NULL]" : BitConverter.ToString(partitionHeader.ExtendedHeaderHash).Replace('-', ' '))}");
builder.AppendLine($" Extended header size in bytes: {partitionHeader.ExtendedHeaderSizeInBytes} (0x{partitionHeader.ExtendedHeaderSizeInBytes:X})");
builder.AppendLine($" Reserved 2: {(partitionHeader.Reserved2 == null ? "[NULL]" : BitConverter.ToString(partitionHeader.Reserved2).Replace('-', ' '))}");
builder.AppendLine(partitionHeader.RSA2048Signature, " RSA-2048 SHA-256 signature");
builder.AppendLine(partitionHeader.MagicID, " Magic ID");
builder.AppendLine(partitionHeader.ContentSizeInMediaUnits, " Content size in media units");
builder.AppendLine(partitionHeader.PartitionId, " Partition ID");
builder.AppendLine(partitionHeader.MakerCode, " Maker code");
builder.AppendLine(partitionHeader.Version, " Version");
builder.AppendLine(partitionHeader.VerificationHash, " Verification hash");
builder.AppendLine(partitionHeader.ProgramId, " Program ID");
builder.AppendLine(partitionHeader.Reserved1, " Reserved 1");
builder.AppendLine(partitionHeader.LogoRegionHash, " Logo region SHA-256 hash");
builder.AppendLine(partitionHeader.ProductCode, " Product code");
builder.AppendLine(partitionHeader.ExtendedHeaderHash, " Extended header SHA-256 hash");
builder.AppendLine(partitionHeader.ExtendedHeaderSizeInBytes, " Extended header size in bytes");
builder.AppendLine(partitionHeader.Reserved2, " Reserved 2");
builder.AppendLine(" Flags:");
if (partitionHeader.Flags == null)
{
@@ -420,29 +419,29 @@ namespace BinaryObjectScanner.Printing
}
else
{
builder.AppendLine($" Reserved 0: {partitionHeader.Flags.Reserved0} (0x{partitionHeader.Flags.Reserved0:X})");
builder.AppendLine($" Reserved 1: {partitionHeader.Flags.Reserved1} (0x{partitionHeader.Flags.Reserved1:X})");
builder.AppendLine($" Reserved 2: {partitionHeader.Flags.Reserved2} (0x{partitionHeader.Flags.Reserved2:X})");
builder.AppendLine(partitionHeader.Flags.Reserved0, " Reserved 0");
builder.AppendLine(partitionHeader.Flags.Reserved1, " Reserved 1");
builder.AppendLine(partitionHeader.Flags.Reserved2, " Reserved 2");
builder.AppendLine($" Crypto method: {partitionHeader.Flags.CryptoMethod} (0x{partitionHeader.Flags.CryptoMethod:X})");
builder.AppendLine($" Content platform: {partitionHeader.Flags.ContentPlatform} (0x{partitionHeader.Flags.ContentPlatform:X})");
builder.AppendLine($" Content type: {partitionHeader.Flags.MediaPlatformIndex} (0x{partitionHeader.Flags.MediaPlatformIndex:X})");
builder.AppendLine($" Content unit size: {partitionHeader.Flags.ContentUnitSize} (0x{partitionHeader.Flags.ContentUnitSize:X})");
builder.AppendLine(partitionHeader.Flags.ContentUnitSize, " Content unit size");
builder.AppendLine($" Bitmasks: {partitionHeader.Flags.BitMasks} (0x{partitionHeader.Flags.BitMasks:X})");
}
builder.AppendLine($" Plain region offset, in media units: {partitionHeader.PlainRegionOffsetInMediaUnits} (0x{partitionHeader.PlainRegionOffsetInMediaUnits:X})");
builder.AppendLine($" Plain region size, in media units: {partitionHeader.PlainRegionSizeInMediaUnits} (0x{partitionHeader.PlainRegionSizeInMediaUnits:X})");
builder.AppendLine($" Logo region offset, in media units: {partitionHeader.LogoRegionOffsetInMediaUnits} (0x{partitionHeader.LogoRegionOffsetInMediaUnits:X})");
builder.AppendLine($" Logo region size, in media units: {partitionHeader.LogoRegionSizeInMediaUnits} (0x{partitionHeader.LogoRegionSizeInMediaUnits:X})");
builder.AppendLine($" ExeFS offset, in media units: {partitionHeader.ExeFSOffsetInMediaUnits} (0x{partitionHeader.ExeFSOffsetInMediaUnits:X})");
builder.AppendLine($" ExeFS size, in media units: {partitionHeader.ExeFSSizeInMediaUnits} (0x{partitionHeader.ExeFSSizeInMediaUnits:X})");
builder.AppendLine($" ExeFS hash region size, in media units: {partitionHeader.ExeFSHashRegionSizeInMediaUnits} (0x{partitionHeader.ExeFSHashRegionSizeInMediaUnits:X})");
builder.AppendLine($" Reserved 3: {(partitionHeader.Reserved3 == null ? "[NULL]" : BitConverter.ToString(partitionHeader.Reserved3).Replace('-', ' '))}");
builder.AppendLine($" RomFS offset, in media units: {partitionHeader.RomFSOffsetInMediaUnits} (0x{partitionHeader.RomFSOffsetInMediaUnits:X})");
builder.AppendLine($" RomFS size, in media units: {partitionHeader.RomFSSizeInMediaUnits} (0x{partitionHeader.RomFSSizeInMediaUnits:X})");
builder.AppendLine($" RomFS hash region size, in media units: {partitionHeader.RomFSHashRegionSizeInMediaUnits} (0x{partitionHeader.RomFSHashRegionSizeInMediaUnits:X})");
builder.AppendLine($" Reserved 4: {(partitionHeader.Reserved4 == null ? "[NULL]" : BitConverter.ToString(partitionHeader.Reserved4).Replace('-', ' '))}");
builder.AppendLine($" ExeFS superblock SHA-256 hash: {(partitionHeader.ExeFSSuperblockHash == null ? "[NULL]" : BitConverter.ToString(partitionHeader.ExeFSSuperblockHash).Replace('-', ' '))}");
builder.AppendLine($" RomFS superblock SHA-256 hash: {(partitionHeader.RomFSSuperblockHash == null ? "[NULL]" : BitConverter.ToString(partitionHeader.RomFSSuperblockHash).Replace('-', ' '))}");
builder.AppendLine(partitionHeader.PlainRegionOffsetInMediaUnits, " Plain region offset, in media units");
builder.AppendLine(partitionHeader.PlainRegionSizeInMediaUnits, " Plain region size, in media units");
builder.AppendLine(partitionHeader.LogoRegionOffsetInMediaUnits, " Logo region offset, in media units");
builder.AppendLine(partitionHeader.LogoRegionSizeInMediaUnits, " Logo region size, in media units");
builder.AppendLine(partitionHeader.ExeFSOffsetInMediaUnits, " ExeFS offset, in media units");
builder.AppendLine(partitionHeader.ExeFSSizeInMediaUnits, " ExeFS size, in media units");
builder.AppendLine(partitionHeader.ExeFSHashRegionSizeInMediaUnits, " ExeFS hash region offset, in media units");
builder.AppendLine(partitionHeader.Reserved3, " Reserved 3");
builder.AppendLine(partitionHeader.RomFSOffsetInMediaUnits, " RomFS offset, in media units");
builder.AppendLine(partitionHeader.RomFSSizeInMediaUnits, " RomFS size, in media units");
builder.AppendLine(partitionHeader.RomFSHashRegionSizeInMediaUnits, " RomFS hash region offset, in media units");
builder.AppendLine(partitionHeader.Reserved4, " Reserved 4");
builder.AppendLine(partitionHeader.ExeFSSuperblockHash, " ExeFS superblock SHA-256 hash");
builder.AppendLine(partitionHeader.RomFSSuperblockHash, " RomFS superblock SHA-256 hash");
}
builder.AppendLine();
}
@@ -462,11 +461,11 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Title ID dependency list: {(metaData.TitleIDDependencyList == null ? "[NULL]" : BitConverter.ToString(metaData.TitleIDDependencyList).Replace('-', ' '))}");
builder.AppendLine($" Reserved 1: {(metaData.Reserved1 == null ? "[NULL]" : BitConverter.ToString(metaData.Reserved1).Replace('-', ' '))}");
builder.AppendLine($" Core version: {metaData.CoreVersion} (0x{metaData.CoreVersion:X})");
builder.AppendLine($" Reserved 2: {(metaData.Reserved2 == null ? "[NULL]" : BitConverter.ToString(metaData.Reserved2).Replace('-', ' '))}");
builder.AppendLine($" Icon data: {(metaData.IconData == null ? "[NULL]" : BitConverter.ToString(metaData.IconData).Replace('-', ' '))}");
builder.AppendLine(metaData.TitleIDDependencyList, " Title ID dependency list");
builder.AppendLine(metaData.Reserved1, " Reserved 1");
builder.AppendLine(metaData.CoreVersion, " Core version");
builder.AppendLine(metaData.Reserved2, " Reserved 2");
builder.AppendLine(metaData.IconData, " Icon data");
builder.AppendLine();
}

View File

@@ -6,7 +6,7 @@ namespace BinaryObjectScanner.Printing
internal static class Extensions
{
/// <summary>
/// Append a line containing a byte value to a StringBuilder
/// Append a line containing a UInt8[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, byte[] value, string prefixString)
@@ -18,6 +18,84 @@ namespace BinaryObjectScanner.Printing
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a Int16[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, short[] value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, short[]? value, string prefixString)
#endif
{
string valueString = (value == null ? "[NULL]" : string.Join(", ", value));
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a UInt16[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, ushort[] value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, ushort[]? value, string prefixString)
#endif
{
string valueString = (value == null ? "[NULL]" : string.Join(", ", value));
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a Int32[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, int[] value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, int[]? value, string prefixString)
#endif
{
string valueString = (value == null ? "[NULL]" : string.Join(", ", value));
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a UInt32[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, uint[] value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, uint[]? value, string prefixString)
#endif
{
string valueString = (value == null ? "[NULL]" : string.Join(", ", value));
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a Int64[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, long[] value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, long[]? value, string prefixString)
#endif
{
string valueString = (value == null ? "[NULL]" : string.Join(", ", value));
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a UInt64[] value to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, ulong[] value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, ulong[]? value, string prefixString)
#endif
{
string valueString = (value == null ? "[NULL]" : string.Join(", ", value));
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a Int8 to a StringBuilder
/// </summary>
@@ -170,5 +248,24 @@ namespace BinaryObjectScanner.Printing
string valueString = value ?? "[NULL]";
return sb.AppendLine($"{prefixString}: {valueString}");
}
/// <summary>
/// Append a line containing a Guid to a StringBuilder
/// </summary>
#if NET48
public static StringBuilder AppendLine(this StringBuilder sb, Guid value, string prefixString)
#else
public static StringBuilder AppendLine(this StringBuilder sb, Guid? value, string prefixString)
#endif
{
#if NET48
string valueString = value.ToString();
#else
value ??= Guid.Empty;
string valueString = value.Value.ToString();
#endif
return sb.AppendLine($"{prefixString}: {value}");
}
}
}

View File

@@ -62,17 +62,17 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Major version: {header.MajorVersion} (0x{header.MajorVersion:X})");
builder.AppendLine($" Minor version: {header.MinorVersion} (0x{header.MinorVersion:X})");
builder.AppendLine($" Cache ID: {header.CacheID} (0x{header.CacheID:X})");
builder.AppendLine($" Last version played: {header.LastVersionPlayed} (0x{header.LastVersionPlayed:X})");
builder.AppendLine($" Dummy 1: {header.Dummy1} (0x{header.Dummy1:X})");
builder.AppendLine($" Dummy 2: {header.Dummy2} (0x{header.Dummy2:X})");
builder.AppendLine($" File size: {header.FileSize} (0x{header.FileSize:X})");
builder.AppendLine($" Block size: {header.BlockSize} (0x{header.BlockSize:X})");
builder.AppendLine($" Block count: {header.BlockCount} (0x{header.BlockCount:X})");
builder.AppendLine($" Dummy 3: {header.Dummy3} (0x{header.Dummy3:X})");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.MajorVersion, " Major version");
builder.AppendLine(header.MinorVersion, " Minor version");
builder.AppendLine(header.CacheID, " Cache ID");
builder.AppendLine(header.LastVersionPlayed, " Last version played");
builder.AppendLine(header.Dummy1, " Dummy 1");
builder.AppendLine(header.Dummy2, " Dummy 2");
builder.AppendLine(header.FileSize, " File size");
builder.AppendLine(header.BlockSize, " Block size");
builder.AppendLine(header.BlockCount, " Block count");
builder.AppendLine(header.Dummy3, " Dummy 3");
builder.AppendLine();
}
@@ -91,14 +91,14 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Block count: {header.BlockCount} (0x{header.BlockCount:X})");
builder.AppendLine($" Blocks used: {header.BlocksUsed} (0x{header.BlocksUsed:X})");
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Dummy 1: {header.Dummy1} (0x{header.Dummy1:X})");
builder.AppendLine($" Dummy 2: {header.Dummy2} (0x{header.Dummy2:X})");
builder.AppendLine($" Dummy 3: {header.Dummy3} (0x{header.Dummy3:X})");
builder.AppendLine($" Dummy 4: {header.Dummy4} (0x{header.Dummy4:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine(header.BlockCount, " Block count");
builder.AppendLine(header.BlocksUsed, " Blocks used");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.Dummy1, " Dummy 1");
builder.AppendLine(header.Dummy2, " Dummy 2");
builder.AppendLine(header.Dummy3, " Dummy 3");
builder.AppendLine(header.Dummy4, " Dummy 4");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine();
}
@@ -127,13 +127,13 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Entry flags: {entry.EntryFlags} (0x{entry.EntryFlags:X})");
builder.AppendLine($" File data offset: {entry.FileDataOffset} (0x{entry.FileDataOffset:X})");
builder.AppendLine($" File data size: {entry.FileDataSize} (0x{entry.FileDataSize:X})");
builder.AppendLine($" First data block index: {entry.FirstDataBlockIndex} (0x{entry.FirstDataBlockIndex:X})");
builder.AppendLine($" Next block entry index: {entry.NextBlockEntryIndex} (0x{entry.NextBlockEntryIndex:X})");
builder.AppendLine($" Previous block entry index: {entry.PreviousBlockEntryIndex} (0x{entry.PreviousBlockEntryIndex:X})");
builder.AppendLine($" Directory index: {entry.DirectoryIndex} (0x{entry.DirectoryIndex:X})");
builder.AppendLine(entry.EntryFlags, " Entry flags");
builder.AppendLine(entry.FileDataOffset, " File data offset");
builder.AppendLine(entry.FileDataSize, " File data size");
builder.AppendLine(entry.FirstDataBlockIndex, " First data block index");
builder.AppendLine(entry.NextBlockEntryIndex, " Next block entry index");
builder.AppendLine(entry.PreviousBlockEntryIndex, " Previous block entry index");
builder.AppendLine(entry.DirectoryIndex, " Directory index");
}
builder.AppendLine();
}
@@ -153,10 +153,10 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Block count: {header.BlockCount} (0x{header.BlockCount:X})");
builder.AppendLine($" First unused entry: {header.FirstUnusedEntry} (0x{header.FirstUnusedEntry:X})");
builder.AppendLine($" Terminator: {header.Terminator} (0x{header.Terminator:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine(header.BlockCount, " Block count");
builder.AppendLine(header.FirstUnusedEntry, " First unused entry");
builder.AppendLine(header.Terminator, " Terminator");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine();
}
@@ -185,7 +185,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Next data block index: {entry.NextDataBlockIndex} (0x{entry.NextDataBlockIndex:X})");
builder.AppendLine(entry.NextDataBlockIndex, " Next data block index");
}
builder.AppendLine();
}
@@ -200,16 +200,16 @@ namespace BinaryObjectScanner.Printing
builder.AppendLine(" -------------------------");
if (header == null)
{
builder.AppendLine($" No block entry map header");
builder.AppendLine(" No block entry map header");
builder.AppendLine();
return;
}
builder.AppendLine($" Block count: {header.BlockCount} (0x{header.BlockCount:X})");
builder.AppendLine($" First block entry index: {header.FirstBlockEntryIndex} (0x{header.FirstBlockEntryIndex:X})");
builder.AppendLine($" Last block entry index: {header.LastBlockEntryIndex} (0x{header.LastBlockEntryIndex:X})");
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine(header.BlockCount, " Block count");
builder.AppendLine(header.FirstBlockEntryIndex, " First block entry index");
builder.AppendLine(header.LastBlockEntryIndex, " Last block entry index");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine();
}
@@ -238,8 +238,8 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Previous data block index: {entry.PreviousBlockEntryIndex} (0x{entry.PreviousBlockEntryIndex:X})");
builder.AppendLine($" Next data block index: {entry.NextBlockEntryIndex} (0x{entry.NextBlockEntryIndex:X})");
builder.AppendLine(entry.PreviousBlockEntryIndex, " Previous data block index");
builder.AppendLine(entry.NextBlockEntryIndex, " Next data block index");
}
builder.AppendLine();
}
@@ -259,20 +259,20 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Cache ID: {header.CacheID} (0x{header.CacheID:X})");
builder.AppendLine($" Last version played: {header.LastVersionPlayed} (0x{header.LastVersionPlayed:X})");
builder.AppendLine($" Item count: {header.ItemCount} (0x{header.ItemCount:X})");
builder.AppendLine($" File count: {header.FileCount} (0x{header.FileCount:X})");
builder.AppendLine($" Dummy 1: {header.Dummy1} (0x{header.Dummy1:X})");
builder.AppendLine($" Directory size: {header.DirectorySize} (0x{header.DirectorySize:X})");
builder.AppendLine($" Name size: {header.NameSize} (0x{header.NameSize:X})");
builder.AppendLine($" Info 1 count: {header.Info1Count} (0x{header.Info1Count:X})");
builder.AppendLine($" Copy count: {header.CopyCount} (0x{header.CopyCount:X})");
builder.AppendLine($" Local count: {header.LocalCount} (0x{header.LocalCount:X})");
builder.AppendLine($" Dummy 2: {header.Dummy2} (0x{header.Dummy2:X})");
builder.AppendLine($" Dummy 3: {header.Dummy3} (0x{header.Dummy3:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.CacheID, " Cache ID");
builder.AppendLine(header.LastVersionPlayed, " Last version played");
builder.AppendLine(header.ItemCount, " Item count");
builder.AppendLine(header.FileCount, " File count");
builder.AppendLine(header.Dummy1, " Dummy 1");
builder.AppendLine(header.DirectorySize, " Directory size");
builder.AppendLine(header.NameSize, " Name size");
builder.AppendLine(header.Info1Count, " Info 1 count");
builder.AppendLine(header.CopyCount, " Copy count");
builder.AppendLine(header.LocalCount, " Local count");
builder.AppendLine(header.Dummy2, " Dummy 2");
builder.AppendLine(header.Dummy3, " Dummy 3");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine();
}
@@ -301,14 +301,14 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Name offset: {entry.NameOffset} (0x{entry.NameOffset:X})");
builder.AppendLine($" Name: {entry.Name ?? "[NULL]"}");
builder.AppendLine($" Item size: {entry.ItemSize} (0x{entry.ItemSize:X})");
builder.AppendLine($" Checksum index: {entry.ChecksumIndex} (0x{entry.ChecksumIndex:X})");
builder.AppendLine(entry.NameOffset, " Name offset");
builder.AppendLine(entry.Name, " Name");
builder.AppendLine(entry.ItemSize, " Item size");
builder.AppendLine(entry.ChecksumIndex, " Checksum index");
builder.AppendLine($" Directory flags: {entry.DirectoryFlags} (0x{entry.DirectoryFlags:X})");
builder.AppendLine($" Parent index: {entry.ParentIndex} (0x{entry.ParentIndex:X})");
builder.AppendLine($" Next index: {entry.NextIndex} (0x{entry.NextIndex:X})");
builder.AppendLine($" First index: {entry.FirstIndex} (0x{entry.FirstIndex:X})");
builder.AppendLine(entry.ParentIndex, " Parent index");
builder.AppendLine(entry.NextIndex, " Next index");
builder.AppendLine(entry.FirstIndex, " First index");
}
builder.AppendLine();
}
@@ -338,7 +338,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Dummy 0: {entry.Dummy0} (0x{entry.Dummy0:X})");
builder.AppendLine(entry.Dummy0, " Dummy 0");
}
builder.AppendLine();
}
@@ -368,7 +368,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Dummy 0: {entry.Dummy0} (0x{entry.Dummy0:X})");
builder.AppendLine(entry.Dummy0, " Dummy 0");
}
builder.AppendLine();
}
@@ -398,7 +398,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Directory index: {entry.DirectoryIndex} (0x{entry.DirectoryIndex:X})");
builder.AppendLine(entry.DirectoryIndex, " Directory index");
}
builder.AppendLine();
}
@@ -428,7 +428,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Directory index: {entry.DirectoryIndex} (0x{entry.DirectoryIndex:X})");
builder.AppendLine(entry.DirectoryIndex, " Directory index");
}
builder.AppendLine();
}
@@ -443,13 +443,13 @@ namespace BinaryObjectScanner.Printing
builder.AppendLine(" -------------------------");
if (header == null)
{
builder.AppendLine($" No directory map header");
builder.AppendLine(" No directory map header");
builder.AppendLine();
return;
}
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Dummy 1: {header.Dummy1} (0x{header.Dummy1:X})");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.Dummy1, " Dummy 1");
builder.AppendLine();
}
@@ -478,7 +478,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" First block index: {entry.FirstBlockIndex} (0x{entry.FirstBlockIndex:X})");
builder.AppendLine(entry.FirstBlockIndex, " First block index");
}
builder.AppendLine();
}
@@ -498,8 +498,8 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Checksum size: {header.ChecksumSize} (0x{header.ChecksumSize:X})");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.ChecksumSize, " Checksum size");
builder.AppendLine();
}
@@ -518,10 +518,10 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Dummy 0: {header.Dummy0} (0x{header.Dummy0:X})");
builder.AppendLine($" Dummy 1: {header.Dummy1} (0x{header.Dummy1:X})");
builder.AppendLine($" Item count: {header.ItemCount} (0x{header.ItemCount:X})");
builder.AppendLine($" Checksum count: {header.ChecksumCount} (0x{header.ChecksumCount:X})");
builder.AppendLine(header.Dummy0, " Dummy 0");
builder.AppendLine(header.Dummy1, " Dummy 1");
builder.AppendLine(header.ItemCount, " Item count");
builder.AppendLine(header.ChecksumCount, " Checksum count");
builder.AppendLine();
}
@@ -550,8 +550,8 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Checksum count: {entry.ChecksumCount} (0x{entry.ChecksumCount:X})");
builder.AppendLine($" First checksum index: {entry.FirstChecksumIndex} (0x{entry.FirstChecksumIndex:X})");
builder.AppendLine(entry.ChecksumCount, " Checksum count");
builder.AppendLine(entry.FirstChecksumIndex, " First checksum index");
}
builder.AppendLine();
}
@@ -581,7 +581,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Checksum: {entry.Checksum} (0x{entry.Checksum:X})");
builder.AppendLine(entry.Checksum, " Checksum");
}
builder.AppendLine();
}
@@ -601,12 +601,12 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Last version played: {header.LastVersionPlayed} (0x{header.LastVersionPlayed:X})");
builder.AppendLine($" Block count: {header.BlockCount} (0x{header.BlockCount:X})");
builder.AppendLine($" Block size: {header.BlockSize} (0x{header.BlockSize:X})");
builder.AppendLine($" First block offset: {header.FirstBlockOffset} (0x{header.FirstBlockOffset:X})");
builder.AppendLine($" Blocks used: {header.BlocksUsed} (0x{header.BlocksUsed:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine(header.LastVersionPlayed, " Last version played");
builder.AppendLine(header.BlockCount, " Block count");
builder.AppendLine(header.BlockSize, " Block size");
builder.AppendLine(header.FirstBlockOffset, " First block offset");
builder.AppendLine(header.BlocksUsed, " Blocks used");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine();
}
}

View File

@@ -75,11 +75,11 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Signature: {header.Signature}");
builder.AppendLine(header.Signature, " Signature");
builder.AppendLine($" Version: {header.Version} (0x{header.Version:X}) [{majorVersion}]");
builder.AppendLine($" Volume info: {header.VolumeInfo} (0x{header.VolumeInfo:X})");
builder.AppendLine($" Descriptor offset: {header.DescriptorOffset} (0x{header.DescriptorOffset:X})");
builder.AppendLine($" Descriptor size: {header.DescriptorSize} (0x{header.DescriptorSize:X})");
builder.AppendLine(header.VolumeInfo, " Volume info");
builder.AppendLine(header.DescriptorOffset, " Descriptor offset");
builder.AppendLine(header.DescriptorSize, " Descriptor size");
builder.AppendLine();
}
@@ -100,34 +100,34 @@ namespace BinaryObjectScanner.Printing
if (majorVersion <= 5)
{
builder.AppendLine($" Data offset: {header.DataOffset} (0x{header.DataOffset:X})");
builder.AppendLine($" First file index: {header.FirstFileIndex} (0x{header.FirstFileIndex:X})");
builder.AppendLine($" Last file index: {header.LastFileIndex} (0x{header.LastFileIndex:X})");
builder.AppendLine($" First file offset: {header.FirstFileOffset} (0x{header.FirstFileOffset:X})");
builder.AppendLine($" First file size expanded: {header.FirstFileSizeExpanded} (0x{header.FirstFileSizeExpanded:X})");
builder.AppendLine($" First file size compressed: {header.FirstFileSizeCompressed} (0x{header.FirstFileSizeCompressed:X})");
builder.AppendLine($" Last file offset: {header.LastFileOffset} (0x{header.LastFileOffset:X})");
builder.AppendLine($" Last file size expanded: {header.LastFileSizeExpanded} (0x{header.LastFileSizeExpanded:X})");
builder.AppendLine($" Last file size compressed: {header.LastFileSizeCompressed} (0x{header.LastFileSizeCompressed:X})");
builder.AppendLine(header.DataOffset, " Data offset");
builder.AppendLine(header.FirstFileIndex, " First file index");
builder.AppendLine(header.LastFileIndex, " Last file index");
builder.AppendLine(header.FirstFileOffset, " First file offset");
builder.AppendLine(header.FirstFileSizeExpanded, " First file size expanded");
builder.AppendLine(header.FirstFileSizeCompressed, " First file size compressed");
builder.AppendLine(header.LastFileOffset, " Last file offset");
builder.AppendLine(header.LastFileSizeExpanded, " Last file size expanded");
builder.AppendLine(header.LastFileSizeCompressed, " Last file size compressed");
}
else
{
builder.AppendLine($" Data offset: {header.DataOffset} (0x{header.DataOffset:X})");
builder.AppendLine($" Data offset high: {header.DataOffsetHigh} (0x{header.DataOffsetHigh:X})");
builder.AppendLine($" First file index: {header.FirstFileIndex} (0x{header.FirstFileIndex:X})");
builder.AppendLine($" Last file index: {header.LastFileIndex} (0x{header.LastFileIndex:X})");
builder.AppendLine($" First file offset: {header.FirstFileOffset} (0x{header.FirstFileOffset:X})");
builder.AppendLine($" First file offset high: {header.FirstFileOffsetHigh} (0x{header.FirstFileOffsetHigh:X})");
builder.AppendLine($" First file size expanded: {header.FirstFileSizeExpanded} (0x{header.FirstFileSizeExpanded:X})");
builder.AppendLine($" First file size expanded high: {header.FirstFileSizeExpandedHigh} (0x{header.FirstFileSizeExpandedHigh:X})");
builder.AppendLine($" First file size compressed: {header.FirstFileSizeCompressed} (0x{header.FirstFileSizeCompressed:X})");
builder.AppendLine($" First file size compressed high: {header.FirstFileSizeCompressedHigh} (0x{header.FirstFileSizeCompressedHigh:X})");
builder.AppendLine($" Last file offset: {header.LastFileOffset} (0x{header.LastFileOffset:X})");
builder.AppendLine($" Last file offset high: {header.LastFileOffsetHigh} (0x{header.LastFileOffsetHigh:X})");
builder.AppendLine($" Last file size expanded: {header.LastFileSizeExpanded} (0x{header.LastFileSizeExpanded:X})");
builder.AppendLine($" Last file size expanded high: {header.LastFileSizeExpandedHigh} (0x{header.LastFileSizeExpandedHigh:X})");
builder.AppendLine($" Last file size compressed: {header.LastFileSizeCompressed} (0x{header.LastFileSizeCompressed:X})");
builder.AppendLine($" Last file size compressed high: {header.LastFileSizeCompressedHigh} (0x{header.LastFileSizeCompressedHigh:X})");
builder.AppendLine(header.DataOffset, " Data offset");
builder.AppendLine(header.DataOffsetHigh, " Data offset high");
builder.AppendLine(header.FirstFileIndex, " First file index");
builder.AppendLine(header.LastFileIndex, " Last file index");
builder.AppendLine(header.FirstFileOffset, " First file offset");
builder.AppendLine(header.FirstFileOffsetHigh, " First file offset high");
builder.AppendLine(header.FirstFileSizeExpanded, " First file size expanded");
builder.AppendLine(header.FirstFileSizeExpandedHigh, " First file size expanded high");
builder.AppendLine(header.FirstFileSizeCompressed, " First file size compressed");
builder.AppendLine(header.FirstFileSizeCompressedHigh, " First file size compressed high");
builder.AppendLine(header.LastFileOffset, " Last file offset");
builder.AppendLine(header.LastFileOffsetHigh, " Last file offset high");
builder.AppendLine(header.LastFileSizeExpanded, " Last file size expanded");
builder.AppendLine(header.LastFileSizeExpandedHigh, " Last file size expanded high");
builder.AppendLine(header.LastFileSizeCompressed, " Last file size compressed");
builder.AppendLine(header.LastFileSizeCompressedHigh, " Last file size compressed high");
}
builder.AppendLine();
}
@@ -147,26 +147,26 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Strings offset: {descriptor.StringsOffset} (0x{descriptor.StringsOffset:X})");
builder.AppendLine($" Reserved 0: {(descriptor.Reserved0 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved0).Replace('-', ' '))}");
builder.AppendLine($" Component list offset: {descriptor.ComponentListOffset} (0x{descriptor.ComponentListOffset:X})");
builder.AppendLine($" File table offset: {descriptor.FileTableOffset} (0x{descriptor.FileTableOffset:X})");
builder.AppendLine($" Reserved 1: {(descriptor.Reserved1 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved1).Replace('-', ' '))}");
builder.AppendLine($" File table size: {descriptor.FileTableSize} (0x{descriptor.FileTableSize:X})");
builder.AppendLine($" File table size 2: {descriptor.FileTableSize2} (0x{descriptor.FileTableSize2:X})");
builder.AppendLine($" Directory count: {descriptor.DirectoryCount} (0x{descriptor.DirectoryCount:X})");
builder.AppendLine($" Reserved 2: {(descriptor.Reserved2 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved2).Replace('-', ' '))}");
builder.AppendLine($" Reserved 3: {(descriptor.Reserved3 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved3).Replace('-', ' '))}");
builder.AppendLine($" Reserved 4: {(descriptor.Reserved4 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved4).Replace('-', ' '))}");
builder.AppendLine($" File count: {descriptor.FileCount} (0x{descriptor.FileCount:X})");
builder.AppendLine($" File table offset 2: {descriptor.FileTableOffset2} (0x{descriptor.FileTableOffset2:X})");
builder.AppendLine($" Component table info count: {descriptor.ComponentTableInfoCount} (0x{descriptor.ComponentTableInfoCount:X})");
builder.AppendLine($" Component table offset: {descriptor.ComponentTableOffset} (0x{descriptor.ComponentTableOffset:X})");
builder.AppendLine($" Reserved 5: {(descriptor.Reserved5 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved5).Replace('-', ' '))}");
builder.AppendLine($" Reserved 6: {(descriptor.Reserved6 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved6).Replace('-', ' '))}");
builder.AppendLine(descriptor.StringsOffset, " Strings offset");
builder.AppendLine(descriptor.Reserved0, " Reserved 0");
builder.AppendLine(descriptor.ComponentListOffset, " Component list offset");
builder.AppendLine(descriptor.FileTableOffset, " File table offset");
builder.AppendLine(descriptor.Reserved1, " Reserved 1");
builder.AppendLine(descriptor.FileTableSize, " File table size");
builder.AppendLine(descriptor.FileTableSize2, " File table size 2");
builder.AppendLine(descriptor.DirectoryCount, " Directory count");
builder.AppendLine(descriptor.Reserved2, " Reserved 2");
builder.AppendLine(descriptor.Reserved3, " Reserved 3");
builder.AppendLine(descriptor.Reserved4, " Reserved 4");
builder.AppendLine(descriptor.FileCount, " File count");
builder.AppendLine(descriptor.FileTableOffset2, " File table offset 2");
builder.AppendLine(descriptor.ComponentTableInfoCount, " Component table info count");
builder.AppendLine(descriptor.ComponentTableOffset, " Component table offset");
builder.AppendLine(descriptor.Reserved5, " Reserved 5");
builder.AppendLine(descriptor.Reserved6, " Reserved 6");
builder.AppendLine();
builder.AppendLine($" File group offsets:");
builder.AppendLine(" File group offsets:");
builder.AppendLine(" -------------------------");
if (descriptor.FileGroupOffsets == null || descriptor.FileGroupOffsets.Length == 0)
{
@@ -176,12 +176,12 @@ namespace BinaryObjectScanner.Printing
{
for (int i = 0; i < descriptor.FileGroupOffsets.Length; i++)
{
builder.AppendLine($" File Group Offset {i}: {descriptor.FileGroupOffsets[i]} (0x{descriptor.FileGroupOffsets[i]:X})");
builder.AppendLine(descriptor.FileGroupOffsets[i], $" File Group Offset {i}");
}
}
builder.AppendLine();
builder.AppendLine($" Component offsets:");
builder.AppendLine(" Component offsets:");
builder.AppendLine(" -------------------------");
if (descriptor.ComponentOffsets == null || descriptor.ComponentOffsets.Length == 0)
{
@@ -191,15 +191,15 @@ namespace BinaryObjectScanner.Printing
{
for (int i = 0; i < descriptor.ComponentOffsets.Length; i++)
{
builder.AppendLine($" Component Offset {i}: {descriptor.ComponentOffsets[i]} (0x{descriptor.ComponentOffsets[i]:X})");
builder.AppendLine(descriptor.ComponentOffsets[i], $" Component Offset {i}");
}
}
builder.AppendLine();
builder.AppendLine($" Setup types offset: {descriptor.SetupTypesOffset} (0x{descriptor.SetupTypesOffset:X})");
builder.AppendLine($" Setup table offset: {descriptor.SetupTableOffset} (0x{descriptor.SetupTableOffset:X})");
builder.AppendLine($" Reserved 7: {(descriptor.Reserved7 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved7).Replace('-', ' '))}");
builder.AppendLine($" Reserved 8: {(descriptor.Reserved8 == null ? "[NULL]" : BitConverter.ToString(descriptor.Reserved8).Replace('-', ' '))}");
builder.AppendLine(descriptor.SetupTypesOffset, " Setup types offset");
builder.AppendLine(descriptor.SetupTableOffset, " Setup table offset");
builder.AppendLine(descriptor.Reserved7, " Reserved 7");
builder.AppendLine(descriptor.Reserved8, " Reserved 8");
builder.AppendLine();
}
@@ -220,7 +220,7 @@ namespace BinaryObjectScanner.Printing
for (int i = 0; i < entries.Length; i++)
{
builder.AppendLine($" File Descriptor Offset {i}: {entries[i]} (0x{entries[i]:X})");
builder.AppendLine(entries[i], $" File Descriptor Offset {i}");
}
builder.AppendLine();
}
@@ -242,7 +242,7 @@ namespace BinaryObjectScanner.Printing
for (int i = 0; i < entries.Length; i++)
{
builder.AppendLine($" Directory Name {i}: {entries[i] ?? "[NULL]"}");
builder.AppendLine(entries[i], $" Directory Name {i}");
}
builder.AppendLine();
}
@@ -272,17 +272,17 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Name offset: {entry.NameOffset} (0x{entry.NameOffset:X})");
builder.AppendLine($" Name: {entry.Name ?? "[NULL]"}");
builder.AppendLine($" Directory index: {entry.DirectoryIndex} (0x{entry.DirectoryIndex:X})");
builder.AppendLine(entry.NameOffset, " Name offset");
builder.AppendLine(entry.Name, " Name");
builder.AppendLine(entry.DirectoryIndex, " Directory index");
builder.AppendLine($" Flags: {entry.Flags} (0x{entry.Flags:X})");
builder.AppendLine($" Expanded size: {entry.ExpandedSize} (0x{entry.ExpandedSize:X})");
builder.AppendLine($" Compressed size: {entry.CompressedSize} (0x{entry.CompressedSize:X})");
builder.AppendLine($" Data offset: {entry.DataOffset} (0x{entry.DataOffset:X})");
builder.AppendLine($" MD5: {(entry.MD5 == null ? "[NULL]" : BitConverter.ToString(entry.MD5).Replace('-', ' '))}");
builder.AppendLine($" Volume: {entry.Volume} (0x{entry.Volume:X})");
builder.AppendLine($" Link previous: {entry.LinkPrevious} (0x{entry.LinkPrevious:X})");
builder.AppendLine($" Link next: {entry.LinkNext} (0x{entry.LinkNext:X})");
builder.AppendLine(entry.ExpandedSize, " Expanded size");
builder.AppendLine(entry.CompressedSize, " Compressed size");
builder.AppendLine(entry.DataOffset, " Data offset");
builder.AppendLine(entry.MD5, " MD5");
builder.AppendLine(entry.Volume, " Volume");
builder.AppendLine(entry.LinkPrevious, " Link previous");
builder.AppendLine(entry.LinkNext, " Link next");
builder.AppendLine($" Link flags: {entry.LinkFlags} (0x{entry.LinkFlags:X})");
}
builder.AppendLine();
@@ -315,10 +315,10 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Name offset: {value.NameOffset} (0x{value.NameOffset:X})");
builder.AppendLine($" Name: {value.Name ?? "[NULL]"}");
builder.AppendLine($" Descriptor offset: {value.DescriptorOffset} (0x{value.DescriptorOffset:X})");
builder.AppendLine($" Next offset: {value.NextOffset} (0x{value.NextOffset:X})");
builder.AppendLine(value.NameOffset, " Name offset");
builder.AppendLine(value.Name, " Name");
builder.AppendLine(value.DescriptorOffset, " Descriptor offset");
builder.AppendLine(value.NextOffset, " Next offset");
}
builder.AppendLine();
}
@@ -344,34 +344,34 @@ namespace BinaryObjectScanner.Printing
builder.AppendLine($" File Group {i}:");
if (fileGroup == null)
{
builder.AppendLine($" Unassigned file group");
builder.AppendLine(" Unassigned file group");
continue;
}
builder.AppendLine($" Name offset: {fileGroup.NameOffset} (0x{fileGroup.NameOffset:X})");
builder.AppendLine($" Name: {fileGroup.Name ?? "[NULL]"}");
builder.AppendLine($" Expanded size: {fileGroup.ExpandedSize} (0x{fileGroup.ExpandedSize:X})");
builder.AppendLine($" Reserved 0: {(fileGroup.Reserved0 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved0).Replace('-', ' '))}");
builder.AppendLine($" Compressed size: {fileGroup.CompressedSize} (0x{fileGroup.CompressedSize:X})");
builder.AppendLine($" Reserved 1: {(fileGroup.Reserved1 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved1).Replace('-', ' '))}");
builder.AppendLine($" Reserved 2: {(fileGroup.Reserved2 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved2).Replace('-', ' '))}");
builder.AppendLine($" Attribute 1: {fileGroup.Attribute1} (0x{fileGroup.Attribute1:X})");
builder.AppendLine($" Attribute 2: {fileGroup.Attribute2} (0x{fileGroup.Attribute2:X})");
builder.AppendLine($" First file: {fileGroup.FirstFile} (0x{fileGroup.FirstFile:X})");
builder.AppendLine($" Last file: {fileGroup.LastFile} (0x{fileGroup.LastFile:X})");
builder.AppendLine($" Unknown offset: {fileGroup.UnknownOffset} (0x{fileGroup.UnknownOffset:X})");
builder.AppendLine($" Var 4 offset: {fileGroup.Var4Offset} (0x{fileGroup.Var4Offset:X})");
builder.AppendLine($" Var 1 offset: {fileGroup.Var1Offset} (0x{fileGroup.Var1Offset:X})");
builder.AppendLine($" HTTP location offset: {fileGroup.HTTPLocationOffset} (0x{fileGroup.HTTPLocationOffset:X})");
builder.AppendLine($" FTP location offset: {fileGroup.FTPLocationOffset} (0x{fileGroup.FTPLocationOffset:X})");
builder.AppendLine($" Misc. offset: {fileGroup.MiscOffset} (0x{fileGroup.MiscOffset:X})");
builder.AppendLine($" Var 2 offset: {fileGroup.Var2Offset} (0x{fileGroup.Var2Offset:X})");
builder.AppendLine($" Target directory offset: {fileGroup.TargetDirectoryOffset} (0x{fileGroup.TargetDirectoryOffset:X})");
builder.AppendLine($" Reserved 3: {(fileGroup.Reserved3 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved3).Replace('-', ' '))}");
builder.AppendLine($" Reserved 4: {(fileGroup.Reserved4 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved4).Replace('-', ' '))}");
builder.AppendLine($" Reserved 5: {(fileGroup.Reserved5 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved5).Replace('-', ' '))}");
builder.AppendLine($" Reserved 6: {(fileGroup.Reserved6 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved6).Replace('-', ' '))}");
builder.AppendLine($" Reserved 7: {(fileGroup.Reserved7 == null ? "[NULL]" : BitConverter.ToString(fileGroup.Reserved7).Replace('-', ' '))}");
builder.AppendLine(fileGroup.NameOffset, " Name offset");
builder.AppendLine(fileGroup.Name, " Name");
builder.AppendLine(fileGroup.ExpandedSize, " Expanded size");
builder.AppendLine(fileGroup.Reserved0, " Reserved 0");
builder.AppendLine(fileGroup.CompressedSize, " Compressed size");
builder.AppendLine(fileGroup.Reserved1, " Reserved 1");
builder.AppendLine(fileGroup.Reserved2, " Reserved 2");
builder.AppendLine(fileGroup.Attribute1, " Attribute 1");
builder.AppendLine(fileGroup.Attribute2, " Attribute 2");
builder.AppendLine(fileGroup.FirstFile, " First file");
builder.AppendLine(fileGroup.LastFile, " Last file");
builder.AppendLine(fileGroup.UnknownOffset, " Unknown offset");
builder.AppendLine(fileGroup.Var4Offset, " Var 4 offset");
builder.AppendLine(fileGroup.Var1Offset, " Var 1 offset");
builder.AppendLine(fileGroup.HTTPLocationOffset, " HTTP location offset");
builder.AppendLine(fileGroup.FTPLocationOffset, " FTP location offset");
builder.AppendLine(fileGroup.MiscOffset, " Misc. offset");
builder.AppendLine(fileGroup.Var2Offset, " Var 2 offset");
builder.AppendLine(fileGroup.TargetDirectoryOffset, " Target directory offset");
builder.AppendLine(fileGroup.Reserved3, " Reserved 3");
builder.AppendLine(fileGroup.Reserved4, " Reserved 4");
builder.AppendLine(fileGroup.Reserved5, " Reserved 5");
builder.AppendLine(fileGroup.Reserved6, " Reserved 6");
builder.AppendLine(fileGroup.Reserved7, " Reserved 7");
}
builder.AppendLine();
}
@@ -397,36 +397,36 @@ namespace BinaryObjectScanner.Printing
builder.AppendLine($" Component {i}:");
if (component == null)
{
builder.AppendLine($" Unassigned component");
builder.AppendLine(" Unassigned component");
continue;
}
builder.AppendLine($" Identifier offset: {component.IdentifierOffset} (0x{component.IdentifierOffset:X})");
builder.AppendLine($" Identifier: {component.Identifier ?? "[NULL]"}");
builder.AppendLine($" Descriptor offset: {component.DescriptorOffset} (0x{component.DescriptorOffset:X})");
builder.AppendLine($" Display name offset: {component.DisplayNameOffset} (0x{component.DisplayNameOffset:X})");
builder.AppendLine($" Display name: {component.DisplayName ?? "[NULL]"}");
builder.AppendLine($" Reserved 0: {(component.Reserved0 == null ? "[NULL]" : BitConverter.ToString(component.Reserved0).Replace('-', ' '))}");
builder.AppendLine($" Reserved offset 0: {component.ReservedOffset0} (0x{component.ReservedOffset0:X})");
builder.AppendLine($" Reserved offset 1: {component.ReservedOffset1} (0x{component.ReservedOffset1:X})");
builder.AppendLine($" Component index: {component.ComponentIndex} (0x{component.ComponentIndex:X})");
builder.AppendLine($" Name offset: {component.NameOffset} (0x{component.NameOffset:X})");
builder.AppendLine($" Name: {component.Name ?? "[NULL]"}");
builder.AppendLine($" Reserved offset 2: {component.ReservedOffset2} (0x{component.ReservedOffset2:X})");
builder.AppendLine($" Reserved offset 3: {component.ReservedOffset3} (0x{component.ReservedOffset3:X})");
builder.AppendLine($" Reserved offset 4: {component.ReservedOffset4} (0x{component.ReservedOffset4:X})");
builder.AppendLine($" Reserved 1: {(component.Reserved1 == null ? "[NULL]" : BitConverter.ToString(component.Reserved1).Replace('-', ' '))}");
builder.AppendLine($" CLSID offset: {component.CLSIDOffset} (0x{component.CLSIDOffset:X})");
builder.AppendLine($" CLSID: {component.CLSID}");
builder.AppendLine($" Reserved 2: {(component.Reserved2 == null ? "[NULL]" : BitConverter.ToString(component.Reserved2).Replace('-', ' '))}");
builder.AppendLine($" Reserved 3: {(component.Reserved3 == null ? "[NULL]" : BitConverter.ToString(component.Reserved3).Replace('-', ' '))}");
builder.AppendLine($" Depends count: {component.DependsCount} (0x{component.DependsCount:X})");
builder.AppendLine($" Depends offset: {component.DependsOffset} (0x{component.DependsOffset:X})");
builder.AppendLine($" File group count: {component.FileGroupCount} (0x{component.FileGroupCount:X})");
builder.AppendLine($" File group names offset: {component.FileGroupNamesOffset} (0x{component.FileGroupNamesOffset:X})");
builder.AppendLine(component.IdentifierOffset, " Identifier offset");
builder.AppendLine(component.Identifier, " Identifier");
builder.AppendLine(component.DescriptorOffset, " Descriptor offset");
builder.AppendLine(component.DisplayNameOffset, " Display name offset");
builder.AppendLine(component.DisplayName, " Display name");
builder.AppendLine(component.Reserved0, " Reserved 0");
builder.AppendLine(component.ReservedOffset0, " Reserved offset 0");
builder.AppendLine(component.ReservedOffset1, " Reserved offset 1");
builder.AppendLine(component.ComponentIndex, " Component index");
builder.AppendLine(component.NameOffset, " Name offset");
builder.AppendLine(component.Name, " Name");
builder.AppendLine(component.ReservedOffset2, " Reserved offset 2");
builder.AppendLine(component.ReservedOffset3, " Reserved offset 3");
builder.AppendLine(component.ReservedOffset4, " Reserved offset 4");
builder.AppendLine(component.Reserved1, " Reserved 1");
builder.AppendLine(component.CLSIDOffset, " CLSID offset");
builder.AppendLine(component.CLSID, " CLSID");
builder.AppendLine(component.Reserved2, " Reserved 2");
builder.AppendLine(component.Reserved3, " Reserved 3");
builder.AppendLine(component.DependsCount, " Depends count");
builder.AppendLine(component.DependsOffset, " Depends offset");
builder.AppendLine(component.FileGroupCount, " File group count");
builder.AppendLine(component.FileGroupNamesOffset, " File group names offset");
builder.AppendLine();
builder.AppendLine($" File group names:");
builder.AppendLine(" File group names:");
builder.AppendLine(" -------------------------");
if (component.FileGroupNames == null || component.FileGroupNames.Length == 0)
{
@@ -436,20 +436,20 @@ namespace BinaryObjectScanner.Printing
{
for (int j = 0; j < component.FileGroupNames.Length; j++)
{
builder.AppendLine($" File Group Name {j}: {component.FileGroupNames[j] ?? "[NULL]"}");
builder.AppendLine(component.FileGroupNames[j], $" File Group Name {j}");
}
}
builder.AppendLine();
builder.AppendLine($" X3 count: {component.X3Count} (0x{component.X3Count:X})");
builder.AppendLine($" X3 offset: {component.X3Offset} (0x{component.X3Offset:X})");
builder.AppendLine($" Sub-components count: {component.SubComponentsCount} (0x{component.SubComponentsCount:X})");
builder.AppendLine($" Sub-components offset: {component.SubComponentsOffset} (0x{component.SubComponentsOffset:X})");
builder.AppendLine($" Next component offset: {component.NextComponentOffset} (0x{component.NextComponentOffset:X})");
builder.AppendLine($" Reserved offset 5: {component.ReservedOffset5} (0x{component.ReservedOffset5:X})");
builder.AppendLine($" Reserved offset 6: {component.ReservedOffset6} (0x{component.ReservedOffset6:X})");
builder.AppendLine($" Reserved offset 7: {component.ReservedOffset7} (0x{component.ReservedOffset7:X})");
builder.AppendLine($" Reserved offset 8: {component.ReservedOffset8} (0x{component.ReservedOffset8:X})");
builder.AppendLine(component.X3Count, " X3 count");
builder.AppendLine(component.X3Offset, " X3 offset");
builder.AppendLine(component.SubComponentsCount, " Sub-components count");
builder.AppendLine(component.SubComponentsOffset, " Sub-components offset");
builder.AppendLine(component.NextComponentOffset, " Next component offset");
builder.AppendLine(component.ReservedOffset5, " Reserved offset 5");
builder.AppendLine(component.ReservedOffset6, " Reserved offset 6");
builder.AppendLine(component.ReservedOffset7, " Reserved offset 7");
builder.AppendLine(component.ReservedOffset8, " Reserved offset 8");
}
builder.AppendLine();
}

View File

@@ -51,29 +51,29 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Magic number: {header.Magic}");
builder.AppendLine($" Last page bytes: {header.LastPageBytes} (0x{header.LastPageBytes:X})");
builder.AppendLine($" Pages: {header.Pages} (0x{header.Pages:X})");
builder.AppendLine($" Relocation items: {header.RelocationItems} (0x{header.RelocationItems:X})");
builder.AppendLine($" Header paragraph size: {header.HeaderParagraphSize} (0x{header.HeaderParagraphSize:X})");
builder.AppendLine($" Minimum extra paragraphs: {header.MinimumExtraParagraphs} (0x{header.MinimumExtraParagraphs:X})");
builder.AppendLine($" Maximum extra paragraphs: {header.MaximumExtraParagraphs} (0x{header.MaximumExtraParagraphs:X})");
builder.AppendLine($" Initial SS value: {header.InitialSSValue} (0x{header.InitialSSValue:X})");
builder.AppendLine($" Initial SP value: {header.InitialSPValue} (0x{header.InitialSPValue:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine($" Initial IP value: {header.InitialIPValue} (0x{header.InitialIPValue:X})");
builder.AppendLine($" Initial CS value: {header.InitialCSValue} (0x{header.InitialCSValue:X})");
builder.AppendLine($" Relocation table address: {header.RelocationTableAddr} (0x{header.RelocationTableAddr:X})");
builder.AppendLine($" Overlay number: {header.OverlayNumber} (0x{header.OverlayNumber:X})");
builder.AppendLine(header.Magic, " Magic number");
builder.AppendLine(header.LastPageBytes, " Last page bytes");
builder.AppendLine(header.Pages, " Pages");
builder.AppendLine(header.RelocationItems, " Relocation items");
builder.AppendLine(header.HeaderParagraphSize, " Header paragraph size");
builder.AppendLine(header.MinimumExtraParagraphs, " Minimum extra paragraphs");
builder.AppendLine(header.MaximumExtraParagraphs, " Maximum extra paragraphs");
builder.AppendLine(header.InitialSSValue, " Initial SS value");
builder.AppendLine(header.InitialSPValue, " Initial SP value");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine(header.InitialIPValue, " Initial IP value");
builder.AppendLine(header.InitialCSValue, " Initial CS value");
builder.AppendLine(header.RelocationTableAddr, " Relocation table address");
builder.AppendLine(header.OverlayNumber, " Overlay number");
builder.AppendLine();
builder.AppendLine(" MS-DOS Stub Extended Header Information:");
builder.AppendLine(" -------------------------");
builder.AppendLine($" Reserved words: {(header.Reserved1 == null ? "[NULL]" : string.Join(", ", header.Reserved1))}");
builder.AppendLine($" OEM identifier: {header.OEMIdentifier} (0x{header.OEMIdentifier:X})");
builder.AppendLine($" OEM information: {header.OEMInformation} (0x{header.OEMInformation:X})");
builder.AppendLine($" Reserved words: {(header.Reserved2 == null ? "[NULL]" : string.Join(", ", header.Reserved2))}");
builder.AppendLine($" New EXE header address: {header.NewExeHeaderAddr} (0x{header.NewExeHeaderAddr:X})");
builder.AppendLine(header.Reserved1, " Reserved words");
builder.AppendLine(header.OEMIdentifier, " OEM identifier");
builder.AppendLine(header.OEMInformation, " OEM information");
builder.AppendLine(header.Reserved2, " Reserved words");
builder.AppendLine(header.NewExeHeaderAddr, " New EXE header address");
builder.AppendLine();
}
@@ -92,52 +92,52 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Signature: {block.Signature}");
builder.AppendLine(block.Signature, " Signature");
builder.AppendLine($" Byte order: {block.ByteOrder} (0x{block.ByteOrder:X})");
builder.AppendLine($" Word order: {block.WordOrder} (0x{block.WordOrder:X})");
builder.AppendLine($" Executable format level: {block.ExecutableFormatLevel} (0x{block.ExecutableFormatLevel:X})");
builder.AppendLine(block.ExecutableFormatLevel, " Executable format level");
builder.AppendLine($" CPU type: {block.CPUType} (0x{block.CPUType:X})");
builder.AppendLine($" Module OS: {block.ModuleOS} (0x{block.ModuleOS:X})");
builder.AppendLine($" Module version: {block.ModuleVersion} (0x{block.ModuleVersion:X})");
builder.AppendLine(block.ModuleVersion, " Module version");
builder.AppendLine($" Module type flags: {block.ModuleTypeFlags} (0x{block.ModuleTypeFlags:X})");
builder.AppendLine($" Module number pages: {block.ModuleNumberPages} (0x{block.ModuleNumberPages:X})");
builder.AppendLine($" Initial object CS: {block.InitialObjectCS} (0x{block.InitialObjectCS:X})");
builder.AppendLine($" Initial EIP: {block.InitialEIP} (0x{block.InitialEIP:X})");
builder.AppendLine($" Initial object SS: {block.InitialObjectSS} (0x{block.InitialObjectSS:X})");
builder.AppendLine($" Initial ESP: {block.InitialESP} (0x{block.InitialESP:X})");
builder.AppendLine($" Memory page size: {block.MemoryPageSize} (0x{block.MemoryPageSize:X})");
builder.AppendLine($" Bytes on last page: {block.BytesOnLastPage} (0x{block.BytesOnLastPage:X})");
builder.AppendLine($" Fix-up section size: {block.FixupSectionSize} (0x{block.FixupSectionSize:X})");
builder.AppendLine($" Fix-up section checksum: {block.FixupSectionChecksum} (0x{block.FixupSectionChecksum:X})");
builder.AppendLine($" Loader section size: {block.LoaderSectionSize} (0x{block.LoaderSectionSize:X})");
builder.AppendLine($" Loader section checksum: {block.LoaderSectionChecksum} (0x{block.LoaderSectionChecksum:X})");
builder.AppendLine($" Object table offset: {block.ObjectTableOffset} (0x{block.ObjectTableOffset:X})");
builder.AppendLine($" Object table count: {block.ObjectTableCount} (0x{block.ObjectTableCount:X})");
builder.AppendLine($" Object page map offset: {block.ObjectPageMapOffset} (0x{block.ObjectPageMapOffset:X})");
builder.AppendLine($" Object iterate data map offset: {block.ObjectIterateDataMapOffset} (0x{block.ObjectIterateDataMapOffset:X})");
builder.AppendLine($" Resource table offset: {block.ResourceTableOffset} (0x{block.ResourceTableOffset:X})");
builder.AppendLine($" Resource table count: {block.ResourceTableCount} (0x{block.ResourceTableCount:X})");
builder.AppendLine($" Resident names table offset: {block.ResidentNamesTableOffset} (0x{block.ResidentNamesTableOffset:X})");
builder.AppendLine($" Entry table offset: {block.EntryTableOffset} (0x{block.EntryTableOffset:X})");
builder.AppendLine($" Module directives table offset: {block.ModuleDirectivesTableOffset} (0x{block.ModuleDirectivesTableOffset:X})");
builder.AppendLine($" Module directives table count: {block.ModuleDirectivesCount} (0x{block.ModuleDirectivesCount:X})");
builder.AppendLine($" Fix-up page table offset: {block.FixupPageTableOffset} (0x{block.FixupPageTableOffset:X})");
builder.AppendLine($" Fix-up record table offset: {block.FixupRecordTableOffset} (0x{block.FixupRecordTableOffset:X})");
builder.AppendLine($" Imported modules name table offset: {block.ImportedModulesNameTableOffset} (0x{block.ImportedModulesNameTableOffset:X})");
builder.AppendLine($" Imported modules count: {block.ImportedModulesCount} (0x{block.ImportedModulesCount:X})");
builder.AppendLine($" Imported procedure name table count: {block.ImportProcedureNameTableOffset} (0x{block.ImportProcedureNameTableOffset:X})");
builder.AppendLine($" Per-page checksum table offset: {block.PerPageChecksumTableOffset} (0x{block.PerPageChecksumTableOffset:X})");
builder.AppendLine($" Data pages offset: {block.DataPagesOffset} (0x{block.DataPagesOffset:X})");
builder.AppendLine($" Preload page count: {block.PreloadPageCount} (0x{block.PreloadPageCount:X})");
builder.AppendLine($" Non-resident names table offset: {block.NonResidentNamesTableOffset} (0x{block.NonResidentNamesTableOffset:X})");
builder.AppendLine($" Non-resident names table length: {block.NonResidentNamesTableLength} (0x{block.NonResidentNamesTableLength:X})");
builder.AppendLine($" Non-resident names table checksum: {block.NonResidentNamesTableChecksum} (0x{block.NonResidentNamesTableChecksum:X})");
builder.AppendLine($" Automatic data object: {block.AutomaticDataObject} (0x{block.AutomaticDataObject:X})");
builder.AppendLine($" Debug information offset: {block.DebugInformationOffset} (0x{block.DebugInformationOffset:X})");
builder.AppendLine($" Debug information length: {block.DebugInformationLength} (0x{block.DebugInformationLength:X})");
builder.AppendLine($" Preload instance pages number: {block.PreloadInstancePagesNumber} (0x{block.PreloadInstancePagesNumber:X})");
builder.AppendLine($" Demand instance pages number: {block.DemandInstancePagesNumber} (0x{block.DemandInstancePagesNumber:X})");
builder.AppendLine($" Extra heap allocation: {block.ExtraHeapAllocation} (0x{block.ExtraHeapAllocation:X})");
builder.AppendLine(block.ModuleNumberPages, " Module number pages");
builder.AppendLine(block.InitialObjectCS, " Initial object CS");
builder.AppendLine(block.InitialEIP, " Initial EIP");
builder.AppendLine(block.InitialObjectSS, " Initial object SS");
builder.AppendLine(block.InitialESP, " Initial ESP");
builder.AppendLine(block.MemoryPageSize, " Memory page size");
builder.AppendLine(block.BytesOnLastPage, " Bytes on last page");
builder.AppendLine(block.FixupSectionSize, " Fix-up section size");
builder.AppendLine(block.FixupSectionChecksum, " Fix-up section checksum");
builder.AppendLine(block.LoaderSectionSize, " Loader section size");
builder.AppendLine(block.LoaderSectionChecksum, " Loader section checksum");
builder.AppendLine(block.ObjectTableOffset, " Object table offset");
builder.AppendLine(block.ObjectTableCount, " Object table count");
builder.AppendLine(block.ObjectPageMapOffset, " Object page map offset");
builder.AppendLine(block.ObjectIterateDataMapOffset, " Object iterate data map offset");
builder.AppendLine(block.ResourceTableOffset, " Resource table offset");
builder.AppendLine(block.ResourceTableCount, " Resource table count");
builder.AppendLine(block.ResidentNamesTableOffset, " Resident names table offset");
builder.AppendLine(block.EntryTableOffset, " Entry table offset");
builder.AppendLine(block.ModuleDirectivesTableOffset, " Module directives table offset");
builder.AppendLine(block.ModuleDirectivesCount, " Module directives table count");
builder.AppendLine(block.FixupPageTableOffset, " Fix-up page table offset");
builder.AppendLine(block.FixupRecordTableOffset, " Fix-up record table offset");
builder.AppendLine(block.ImportedModulesNameTableOffset, " Imported modules name table offset");
builder.AppendLine(block.ImportedModulesCount, " Imported modules count");
builder.AppendLine(block.ImportProcedureNameTableOffset, " Imported procedure name table count");
builder.AppendLine(block.PerPageChecksumTableOffset, " Per-page checksum table offset");
builder.AppendLine(block.DataPagesOffset, " Data pages offset");
builder.AppendLine(block.PreloadPageCount, " Preload page count");
builder.AppendLine(block.NonResidentNamesTableOffset, " Non-resident names table offset");
builder.AppendLine(block.NonResidentNamesTableLength, " Non-resident names table length");
builder.AppendLine(block.NonResidentNamesTableChecksum, " Non-resident names table checksum");
builder.AppendLine(block.AutomaticDataObject, " Automatic data object");
builder.AppendLine(block.DebugInformationOffset, " Debug information offset");
builder.AppendLine(block.DebugInformationLength, " Debug information length");
builder.AppendLine(block.PreloadInstancePagesNumber, " Preload instance pages number");
builder.AppendLine(block.DemandInstancePagesNumber, " Demand instance pages number");
builder.AppendLine(block.ExtraHeapAllocation, " Extra heap allocation");
builder.AppendLine();
}
@@ -166,12 +166,12 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Virtual segment size: {entry.VirtualSegmentSize} (0x{entry.VirtualSegmentSize:X})");
builder.AppendLine($" Relocation base address: {entry.RelocationBaseAddress} (0x{entry.RelocationBaseAddress:X})");
builder.AppendLine(entry.VirtualSegmentSize, " Virtual segment size");
builder.AppendLine(entry.RelocationBaseAddress, " Relocation base address");
builder.AppendLine($" Object flags: {entry.ObjectFlags} (0x{entry.ObjectFlags:X})");
builder.AppendLine($" Page table index: {entry.PageTableIndex} (0x{entry.PageTableIndex:X})");
builder.AppendLine($" Page table entries: {entry.PageTableEntries} (0x{entry.PageTableEntries:X})");
builder.AppendLine($" Reserved: {entry.Reserved} (0x{entry.Reserved:X})");
builder.AppendLine(entry.PageTableIndex, " Page table index");
builder.AppendLine(entry.PageTableEntries, " Page table entries");
builder.AppendLine(entry.Reserved, " Reserved");
}
builder.AppendLine();
}
@@ -201,8 +201,8 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Page data offset: {entry.PageDataOffset} (0x{entry.PageDataOffset:X})");
builder.AppendLine($" Data size: {entry.DataSize} (0x{entry.DataSize:X})");
builder.AppendLine(entry.PageDataOffset, " Page data offset");
builder.AppendLine(entry.DataSize, " Data size");
builder.AppendLine($" Flags: {entry.Flags} (0x{entry.Flags:X})");
}
builder.AppendLine();
@@ -234,10 +234,10 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Type ID: {entry.TypeID} (0x{entry.TypeID:X})");
builder.AppendLine($" Name ID: {entry.NameID} (0x{entry.NameID:X})");
builder.AppendLine($" Resource size: {entry.ResourceSize} (0x{entry.ResourceSize:X})");
builder.AppendLine($" Object number: {entry.ObjectNumber} (0x{entry.ObjectNumber:X})");
builder.AppendLine($" Offset: {entry.Offset} (0x{entry.Offset:X})");
builder.AppendLine(entry.NameID, " Name ID");
builder.AppendLine(entry.ResourceSize, " Resource size");
builder.AppendLine(entry.ObjectNumber, " Object number");
builder.AppendLine(entry.Offset, " Offset");
}
builder.AppendLine();
}
@@ -267,9 +267,9 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Length: {entry.Length} (0x{entry.Length:X})");
builder.AppendLine($" Name: {entry.Name ?? "[NULL]"}");
builder.AppendLine($" Ordinal number: {entry.OrdinalNumber} (0x{entry.OrdinalNumber:X})");
builder.AppendLine(entry.Length, " Length");
builder.AppendLine(entry.Name, " Name");
builder.AppendLine(entry.OrdinalNumber, " Ordinal number");
}
builder.AppendLine();
}
@@ -299,11 +299,11 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Entries: {bundle.Entries} (0x{bundle.Entries:X})");
builder.AppendLine(bundle.Entries, " Entries");
builder.AppendLine($" Bundle type: {bundle.BundleType} (0x{bundle.BundleType:X})");
builder.AppendLine();
builder.AppendLine($" Entry Table Entries:");
builder.AppendLine(" Entry Table Entries:");
builder.AppendLine(" -------------------------");
if (bundle.TableEntries == null || bundle.TableEntries.Length == 0)
{
@@ -325,34 +325,34 @@ namespace BinaryObjectScanner.Printing
switch (bundle.BundleType & ~BundleType.ParameterTypingInformationPresent)
{
case BundleType.UnusedEntry:
builder.AppendLine($" Unused, empty entry");
builder.AppendLine(" Unused, empty entry");
break;
case BundleType.SixteenBitEntry:
builder.AppendLine($" Object number: {entry.SixteenBitObjectNumber} (0x{entry.SixteenBitObjectNumber:X})");
builder.AppendLine(entry.SixteenBitObjectNumber, " Object number");
builder.AppendLine($" Entry flags: {entry.SixteenBitEntryFlags} (0x{entry.SixteenBitEntryFlags:X})");
builder.AppendLine($" Offset: {entry.SixteenBitOffset} (0x{entry.SixteenBitOffset:X})");
builder.AppendLine(entry.SixteenBitOffset, " Offset");
break;
case BundleType.TwoEightySixCallGateEntry:
builder.AppendLine($" Object number: {entry.TwoEightySixObjectNumber} (0x{entry.TwoEightySixObjectNumber:X})");
builder.AppendLine(entry.TwoEightySixObjectNumber, " Object number");
builder.AppendLine($" Entry flags: {entry.TwoEightySixEntryFlags} (0x{entry.TwoEightySixEntryFlags:X})");
builder.AppendLine($" Offset: {entry.TwoEightySixOffset} (0x{entry.TwoEightySixOffset:X})");
builder.AppendLine($" Callgate: {entry.TwoEightySixCallgate} (0x{entry.TwoEightySixCallgate:X})");
builder.AppendLine(entry.TwoEightySixOffset, " Offset");
builder.AppendLine(entry.TwoEightySixCallgate, " Callgate");
break;
case BundleType.ThirtyTwoBitEntry:
builder.AppendLine($" Object number: {entry.ThirtyTwoBitObjectNumber} (0x{entry.ThirtyTwoBitObjectNumber:X})");
builder.AppendLine(entry.ThirtyTwoBitObjectNumber, " Object number");
builder.AppendLine($" Entry flags: {entry.ThirtyTwoBitEntryFlags} (0x{entry.ThirtyTwoBitEntryFlags:X})");
builder.AppendLine($" Offset: {entry.ThirtyTwoBitOffset} (0x{entry.ThirtyTwoBitOffset:X})");
builder.AppendLine(entry.ThirtyTwoBitOffset, " Offset");
break;
case BundleType.ForwarderEntry:
builder.AppendLine($" Reserved: {entry.ForwarderReserved} (0x{entry.ForwarderReserved:X})");
builder.AppendLine(entry.ForwarderReserved, " Reserved");
builder.AppendLine($" Forwarder flags: {entry.ForwarderFlags} (0x{entry.ForwarderFlags:X})");
builder.AppendLine($" Module ordinal number: {entry.ForwarderModuleOrdinalNumber} (0x{entry.ForwarderModuleOrdinalNumber:X})");
builder.AppendLine($" Procedure name offset: {entry.ProcedureNameOffset} (0x{entry.ProcedureNameOffset:X})");
builder.AppendLine($" Import ordinal number: {entry.ImportOrdinalNumber} (0x{entry.ImportOrdinalNumber:X})");
builder.AppendLine(entry.ForwarderModuleOrdinalNumber, " Module ordinal number");
builder.AppendLine(entry.ProcedureNameOffset, " Procedure name offset");
builder.AppendLine(entry.ImportOrdinalNumber, " Import ordinal number");
break;
default:
@@ -390,8 +390,8 @@ namespace BinaryObjectScanner.Printing
}
builder.AppendLine($" Directive number: {entry.DirectiveNumber} (0x{entry.DirectiveNumber:X})");
builder.AppendLine($" Directive data length: {entry.DirectiveDataLength} (0x{entry.DirectiveDataLength:X})");
builder.AppendLine($" Directive data offset: {entry.DirectiveDataOffset} (0x{entry.DirectiveDataOffset:X})");
builder.AppendLine(entry.DirectiveDataLength, " Directive data length");
builder.AppendLine(entry.DirectiveDataOffset, " Directive data offset");
}
builder.AppendLine();
}
@@ -421,13 +421,13 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Entry count: {entry.EntryCount} (0x{entry.EntryCount:X})");
builder.AppendLine($" Ordinal index: {entry.OrdinalIndex} (0x{entry.OrdinalIndex:X})");
builder.AppendLine($" Version: {entry.Version} (0x{entry.Version:X})");
builder.AppendLine($" Object entries count: {entry.ObjectEntriesCount} (0x{entry.ObjectEntriesCount:X})");
builder.AppendLine($" Object number in module: {entry.ObjectNumberInModule} (0x{entry.ObjectNumberInModule:X})");
builder.AppendLine($" Object load base address: {entry.ObjectLoadBaseAddress} (0x{entry.ObjectLoadBaseAddress:X})");
builder.AppendLine($" Object virtual address size: {entry.ObjectVirtualAddressSize} (0x{entry.ObjectVirtualAddressSize:X})");
builder.AppendLine(entry.EntryCount, " Entry count");
builder.AppendLine(entry.OrdinalIndex, " Ordinal index");
builder.AppendLine(entry.Version, " Version");
builder.AppendLine(entry.ObjectEntriesCount, " Object entries count");
builder.AppendLine(entry.ObjectNumberInModule, " Object number in module");
builder.AppendLine(entry.ObjectLoadBaseAddress, " Object load base address");
builder.AppendLine(entry.ObjectVirtualAddressSize, " Object virtual address size");
}
builder.AppendLine();
}
@@ -457,7 +457,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Offset: {entry.Offset} (0x{entry.Offset:X})");
builder.AppendLine(entry.Offset, " Offset");
}
builder.AppendLine();
}
@@ -492,27 +492,27 @@ namespace BinaryObjectScanner.Printing
// Source list flag
if (entry.SourceType.HasFlag(FixupRecordSourceType.SourceListFlag))
builder.AppendLine($" Source offset list count: {entry.SourceOffsetListCount} (0x{entry.SourceOffsetListCount:X})");
builder.AppendLine(entry.SourceOffsetListCount, " Source offset list count");
else
builder.AppendLine($" Source offset: {entry.SourceOffset} (0x{entry.SourceOffset:X})");
builder.AppendLine(entry.SourceOffset, " Source offset");
// OBJECT / TRGOFF
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.InternalReference))
{
// 16-bit Object Number/Module Ordinal Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.SixteenBitObjectNumberModuleOrdinalFlag))
builder.AppendLine($" Target object number: {entry.TargetObjectNumberWORD} (0x{entry.TargetObjectNumberWORD:X})");
builder.AppendLine(entry.TargetObjectNumberWORD, " Target object number");
else
builder.AppendLine($" Target object number: {entry.TargetObjectNumberByte} (0x{entry.TargetObjectNumberByte:X})");
builder.AppendLine(entry.TargetObjectNumberByte, " Target object number");
// 16-bit Selector fixup
if (!entry.SourceType.HasFlag(FixupRecordSourceType.SixteenBitSelectorFixup))
{
// 32-bit Target Offset Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.ThirtyTwoBitTargetOffsetFlag))
builder.AppendLine($" Target offset: {entry.TargetOffsetDWORD} (0x{entry.TargetOffsetDWORD:X})");
builder.AppendLine(entry.TargetOffsetDWORD, " Target offset");
else
builder.AppendLine($" Target offset: {entry.TargetOffsetWORD} (0x{entry.TargetOffsetWORD:X})");
builder.AppendLine(entry.TargetOffsetWORD, " Target offset");
}
}
@@ -521,26 +521,26 @@ namespace BinaryObjectScanner.Printing
{
// 16-bit Object Number/Module Ordinal Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.SixteenBitObjectNumberModuleOrdinalFlag))
builder.AppendLine($" Ordinal index import module name table: {entry.OrdinalIndexImportModuleNameTableWORD} (0x{entry.OrdinalIndexImportModuleNameTableWORD:X})");
builder.AppendLine(entry.OrdinalIndexImportModuleNameTableWORD, " Ordinal index import module name table");
else
builder.AppendLine($" Ordinal index import module name table: {entry.OrdinalIndexImportModuleNameTableByte} (0x{entry.OrdinalIndexImportModuleNameTableByte:X})");
builder.AppendLine(entry.OrdinalIndexImportModuleNameTableByte, " Ordinal index import module name table");
// 8-bit Ordinal Flag & 32-bit Target Offset Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.EightBitOrdinalFlag))
builder.AppendLine($" Imported ordinal number: {entry.ImportedOrdinalNumberByte} (0x{entry.ImportedOrdinalNumberByte:X})");
builder.AppendLine(entry.ImportedOrdinalNumberByte, " Imported ordinal number");
else if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.ThirtyTwoBitTargetOffsetFlag))
builder.AppendLine($" Imported ordinal number: {entry.ImportedOrdinalNumberDWORD} (0x{entry.ImportedOrdinalNumberDWORD:X})");
builder.AppendLine(entry.ImportedOrdinalNumberDWORD, " Imported ordinal number");
else
builder.AppendLine($" Imported ordinal number: {entry.ImportedOrdinalNumberWORD} (0x{entry.ImportedOrdinalNumberWORD:X})");
builder.AppendLine(entry.ImportedOrdinalNumberWORD, " Imported ordinal number");
// Additive Fixup Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.AdditiveFixupFlag))
{
// 32-bit Additive Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.ThirtyTwoBitAdditiveFixupFlag))
builder.AppendLine($" Additive fixup value: {entry.AdditiveFixupValueDWORD} (0x{entry.AdditiveFixupValueDWORD:X})");
builder.AppendLine(entry.AdditiveFixupValueDWORD, " Additive fixup value");
else
builder.AppendLine($" Additive fixup value: {entry.AdditiveFixupValueWORD} (0x{entry.AdditiveFixupValueWORD:X})");
builder.AppendLine(entry.AdditiveFixupValueWORD, " Additive fixup value");
}
}
@@ -549,24 +549,24 @@ namespace BinaryObjectScanner.Printing
{
// 16-bit Object Number/Module Ordinal Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.SixteenBitObjectNumberModuleOrdinalFlag))
builder.AppendLine($" Ordinal index import module name table: {entry.OrdinalIndexImportModuleNameTableWORD} (0x{entry.OrdinalIndexImportModuleNameTableWORD:X})");
builder.AppendLine(entry.OrdinalIndexImportModuleNameTableWORD, " Ordinal index import module name table");
else
builder.AppendLine($" Ordinal index import module name table: {entry.OrdinalIndexImportModuleNameTableByte} (0x{entry.OrdinalIndexImportModuleNameTableByte:X})");
builder.AppendLine(entry.OrdinalIndexImportModuleNameTableByte, " Ordinal index import module name table");
// 32-bit Target Offset Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.ThirtyTwoBitTargetOffsetFlag))
builder.AppendLine($" Offset import procedure name table: {entry.OffsetImportProcedureNameTableDWORD} (0x{entry.OffsetImportProcedureNameTableDWORD:X})");
builder.AppendLine(entry.OffsetImportProcedureNameTableDWORD, " Offset import procedure name table");
else
builder.AppendLine($" Offset import procedure name table: {entry.OffsetImportProcedureNameTableWORD} (0x{entry.OffsetImportProcedureNameTableWORD:X})");
builder.AppendLine(entry.OffsetImportProcedureNameTableWORD, " Offset import procedure name table");
// Additive Fixup Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.AdditiveFixupFlag))
{
// 32-bit Additive Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.ThirtyTwoBitAdditiveFixupFlag))
builder.AppendLine($" Additive fixup value: {entry.AdditiveFixupValueDWORD} (0x{entry.AdditiveFixupValueDWORD:X})");
builder.AppendLine(entry.AdditiveFixupValueDWORD, " Additive fixup value");
else
builder.AppendLine($" Additive fixup value: {entry.AdditiveFixupValueWORD} (0x{entry.AdditiveFixupValueWORD:X})");
builder.AppendLine(entry.AdditiveFixupValueWORD, " Additive fixup value");
}
}
@@ -575,39 +575,39 @@ namespace BinaryObjectScanner.Printing
{
// 16-bit Object Number/Module Ordinal Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.SixteenBitObjectNumberModuleOrdinalFlag))
builder.AppendLine($" Target object number: {entry.TargetObjectNumberWORD} (0x{entry.TargetObjectNumberWORD:X})");
builder.AppendLine(entry.TargetObjectNumberWORD, " Target object number");
else
builder.AppendLine($" Target object number: {entry.TargetObjectNumberByte} (0x{entry.TargetObjectNumberByte:X})");
builder.AppendLine(entry.TargetObjectNumberByte, " Target object number");
// Additive Fixup Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.AdditiveFixupFlag))
{
// 32-bit Additive Flag
if (entry.TargetFlags.HasFlag(FixupRecordTargetFlags.ThirtyTwoBitAdditiveFixupFlag))
builder.AppendLine($" Additive fixup value: {entry.AdditiveFixupValueDWORD} (0x{entry.AdditiveFixupValueDWORD:X})");
builder.AppendLine(entry.AdditiveFixupValueDWORD, " Additive fixup value");
else
builder.AppendLine($" Additive fixup value: {entry.AdditiveFixupValueWORD} (0x{entry.AdditiveFixupValueWORD:X})");
builder.AppendLine(entry.AdditiveFixupValueWORD, " Additive fixup value");
}
}
// No other top-level flags recognized
else
{
builder.AppendLine($" Unknown entry format");
builder.AppendLine(" Unknown entry format");
}
builder.AppendLine();
builder.AppendLine($" Source Offset List:");
builder.AppendLine(" Source Offset List:");
builder.AppendLine(" -------------------------");
if (entry.SourceOffsetList == null || entry.SourceOffsetList.Length == 0)
{
builder.AppendLine($" No source offset list entries");
builder.AppendLine(" No source offset list entries");
}
else
{
for (int j = 0; j < entry.SourceOffsetList.Length; j++)
{
builder.AppendLine($" Source Offset List Entry {j}: {entry.SourceOffsetList[j]} (0x{entry.SourceOffsetList[j]:X})");
builder.AppendLine(entry.SourceOffsetList[j], $" Source Offset List Entry {j}");
}
}
builder.AppendLine();
@@ -639,8 +639,8 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Length: {entry.Length} (0x{entry.Length:X})");
builder.AppendLine($" Name: {entry.Name ?? "[NULL]"}");
builder.AppendLine(entry.Length, " Length");
builder.AppendLine(entry.Name, " Name");
}
builder.AppendLine();
}
@@ -670,8 +670,8 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Length: {entry.Length} (0x{entry.Length:X})");
builder.AppendLine($" Name: {entry.Name ?? "[NULL]"}");
builder.AppendLine(entry.Length, " Length");
builder.AppendLine(entry.Name, " Name");
}
builder.AppendLine();
}
@@ -701,7 +701,7 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Checksum: {entry.Checksum} (0x{entry.Checksum:X})");
builder.AppendLine(entry.Checksum, " Checksum");
}
builder.AppendLine();
}
@@ -731,9 +731,9 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Length: {entry.Length} (0x{entry.Length:X})");
builder.AppendLine($" Name: {entry.Name ?? "[NULL]"}");
builder.AppendLine($" Ordinal number: {entry.OrdinalNumber} (0x{entry.OrdinalNumber:X})");
builder.AppendLine(entry.Length, " Length");
builder.AppendLine(entry.Name, " Name");
builder.AppendLine(entry.OrdinalNumber, " Ordinal number");
}
builder.AppendLine();
}
@@ -753,7 +753,7 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Signature: {di.Signature ?? "[NULL]"}");
builder.AppendLine(di.Signature, " Signature");
builder.AppendLine($" Format type: {di.FormatType} (0x{di.FormatType:X})");
// Debugger data
builder.AppendLine();

View File

@@ -30,20 +30,20 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Magic number: {header.Magic}");
builder.AppendLine($" Last page bytes: {header.LastPageBytes} (0x{header.LastPageBytes:X})");
builder.AppendLine($" Pages: {header.Pages} (0x{header.Pages:X})");
builder.AppendLine($" Relocation items: {header.RelocationItems} (0x{header.RelocationItems:X})");
builder.AppendLine($" Header paragraph size: {header.HeaderParagraphSize} (0x{header.HeaderParagraphSize:X})");
builder.AppendLine($" Minimum extra paragraphs: {header.MinimumExtraParagraphs} (0x{header.MinimumExtraParagraphs:X})");
builder.AppendLine($" Maximum extra paragraphs: {header.MaximumExtraParagraphs} (0x{header.MaximumExtraParagraphs:X})");
builder.AppendLine($" Initial SS value: {header.InitialSSValue} (0x{header.InitialSSValue:X})");
builder.AppendLine($" Initial SP value: {header.InitialSPValue} (0x{header.InitialSPValue:X})");
builder.AppendLine($" Checksum: {header.Checksum} (0x{header.Checksum:X})");
builder.AppendLine($" Initial IP value: {header.InitialIPValue} (0x{header.InitialIPValue:X})");
builder.AppendLine($" Initial CS value: {header.InitialCSValue} (0x{header.InitialCSValue:X})");
builder.AppendLine($" Relocation table address: {header.RelocationTableAddr} (0x{header.RelocationTableAddr:X})");
builder.AppendLine($" Overlay number: {header.OverlayNumber} (0x{header.OverlayNumber:X})");
builder.AppendLine(header.Magic, " Magic number");
builder.AppendLine(header.LastPageBytes, " Last page bytes");
builder.AppendLine(header.Pages, " Pages");
builder.AppendLine(header.RelocationItems, " Relocation items");
builder.AppendLine(header.HeaderParagraphSize, " Header paragraph size");
builder.AppendLine(header.MinimumExtraParagraphs, " Minimum extra paragraphs");
builder.AppendLine(header.MaximumExtraParagraphs, " Maximum extra paragraphs");
builder.AppendLine(header.InitialSSValue, " Initial SS value");
builder.AppendLine(header.InitialSPValue, " Initial SP value");
builder.AppendLine(header.Checksum, " Checksum");
builder.AppendLine(header.InitialIPValue, " Initial IP value");
builder.AppendLine(header.InitialCSValue, " Initial CS value");
builder.AppendLine(header.RelocationTableAddr, " Relocation table address");
builder.AppendLine(header.OverlayNumber, " Overlay number");
builder.AppendLine();
}
@@ -68,12 +68,12 @@ namespace BinaryObjectScanner.Printing
builder.AppendLine($" Relocation Table Entry {i}");
if (entry == null)
{
builder.AppendLine($" [NULL]");
builder.AppendLine(" [NULL]");
continue;
}
builder.AppendLine($" Offset: {entry.Offset} (0x{entry.Offset:X})");
builder.AppendLine($" Segment: {entry.Segment} (0x{entry.Segment:X})");
builder.AppendLine(entry.Offset, " Offset");
builder.AppendLine(entry.Segment, " Segment");
}
builder.AppendLine();
}

View File

@@ -32,38 +32,38 @@ namespace BinaryObjectScanner.Printing
return;
}
builder.AppendLine($" Signature: {header.Signature}");
builder.AppendLine($" Reserved 1: {header.Reserved1} (0x{header.Reserved1:X})");
builder.AppendLine($" Cabinet size: {header.CabinetSize} (0x{header.CabinetSize:X})");
builder.AppendLine($" Reserved 2: {header.Reserved2} (0x{header.Reserved2:X})");
builder.AppendLine($" Files offset: {header.FilesOffset} (0x{header.FilesOffset:X})");
builder.AppendLine($" Reserved 3: {header.Reserved3} (0x{header.Reserved3:X})");
builder.AppendLine($" Minor version: {header.VersionMinor} (0x{header.VersionMinor:X})");
builder.AppendLine($" Major version: {header.VersionMajor} (0x{header.VersionMajor:X})");
builder.AppendLine($" Folder count: {header.FolderCount} (0x{header.FolderCount:X})");
builder.AppendLine($" File count: {header.FileCount} (0x{header.FileCount:X})");
builder.AppendLine(header.Signature, " Signature");
builder.AppendLine(header.Reserved1, " Reserved 1");
builder.AppendLine(header.CabinetSize, " Cabinet size");
builder.AppendLine(header.Reserved2, " Reserved 2");
builder.AppendLine(header.FilesOffset, " Files offset");
builder.AppendLine(header.Reserved3, " Reserved 3");
builder.AppendLine(header.VersionMinor, " Minor version");
builder.AppendLine(header.VersionMajor, " Major version");
builder.AppendLine(header.FolderCount, " Folder count");
builder.AppendLine(header.FileCount, " File count");
builder.AppendLine($" Flags: {header.Flags} (0x{header.Flags:X})");
builder.AppendLine($" Set ID: {header.SetID} (0x{header.SetID:X})");
builder.AppendLine($" Cabinet index: {header.CabinetIndex} (0x{header.CabinetIndex:X})");
builder.AppendLine(header.SetID, " Set ID");
builder.AppendLine(header.CabinetIndex, " Cabinet index");
if (header.Flags.HasFlag(HeaderFlags.RESERVE_PRESENT))
{
builder.AppendLine($" Header reserved size: {header.HeaderReservedSize} (0x{header.HeaderReservedSize:X})");
builder.AppendLine($" Folder reserved size: {header.FolderReservedSize} (0x{header.FolderReservedSize:X})");
builder.AppendLine($" Data reserved size: {header.DataReservedSize} (0x{header.DataReservedSize:X})");
builder.AppendLine($" Reserved data = {(header.ReservedData == null ? "[NULL]" : BitConverter.ToString(header.ReservedData).Replace(" - ", " "))}");
builder.AppendLine(header.HeaderReservedSize, " Header reserved size");
builder.AppendLine(header.FolderReservedSize, " Folder reserved size");
builder.AppendLine(header.DataReservedSize, " Data reserved size");
builder.AppendLine(header.ReservedData, " Reserved data");
}
if (header.Flags.HasFlag(HeaderFlags.PREV_CABINET))
{
builder.AppendLine($" Previous cabinet: {header.CabinetPrev}");
builder.AppendLine($" Previous disk: {header.DiskPrev}");
builder.AppendLine(header.CabinetPrev, " Previous cabinet");
builder.AppendLine(header.DiskPrev, " Previous disk");
}
if (header.Flags.HasFlag(HeaderFlags.NEXT_CABINET))
{
builder.AppendLine($" Next cabinet: {header.CabinetNext}");
builder.AppendLine($" Next disk: {header.DiskNext}");
builder.AppendLine(header.CabinetNext, " Next cabinet");
builder.AppendLine(header.DiskNext, " Next disk");
}
builder.AppendLine();
@@ -94,11 +94,11 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Cab start offset = {entry.CabStartOffset} (0x{entry.CabStartOffset:X})");
builder.AppendLine($" Data count = {entry.DataCount} (0x{entry.DataCount:X})");
builder.AppendLine($" Compression type = {entry.CompressionType} (0x{entry.CompressionType:X})");
builder.AppendLine($" Masked compression type = {entry.CompressionType & CompressionType.MASK_TYPE}");
builder.AppendLine($" Reserved data = {(entry.ReservedData == null ? "[NULL]" : BitConverter.ToString(entry.ReservedData).Replace("-", " "))}");
builder.AppendLine(entry.CabStartOffset, " Cab start offset");
builder.AppendLine(entry.DataCount, " Data count");
builder.AppendLine($" Compression type: {entry.CompressionType} (0x{entry.CompressionType:X})");
builder.AppendLine($" Masked compression type: {entry.CompressionType & CompressionType.MASK_TYPE}");
builder.AppendLine(entry.ReservedData, " Reserved data");
builder.AppendLine();
builder.AppendLine(" Data Blocks");
@@ -119,11 +119,11 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" Checksum = {dataBlock.Checksum} (0x{dataBlock.Checksum:X})");
builder.AppendLine($" Compressed size = {dataBlock.CompressedSize} (0x{dataBlock.CompressedSize:X})");
builder.AppendLine($" Uncompressed size = {dataBlock.UncompressedSize} (0x{dataBlock.UncompressedSize:X})");
builder.AppendLine($" Reserved data = {(dataBlock.ReservedData == null ? "[NULL]" : BitConverter.ToString(dataBlock.ReservedData).Replace("-", " "))}");
//builder.AppendLine($" Compressed data = {BitConverter.ToString(dataBlock.CompressedData).Replace("-", " ")}");
builder.AppendLine(dataBlock.Checksum, " Checksum");
builder.AppendLine(dataBlock.CompressedSize, " Compressed size");
builder.AppendLine(dataBlock.UncompressedSize, " Uncompressed size");
builder.AppendLine(dataBlock.ReservedData, " Reserved data");
//builder.AppendLine(dataBlock.CompressedData, " Compressed data");
}
}
builder.AppendLine();
@@ -154,13 +154,13 @@ namespace BinaryObjectScanner.Printing
continue;
}
builder.AppendLine($" File size = {entry.FileSize} (0x{entry.FileSize:X})");
builder.AppendLine($" Folder start offset = {entry.FolderStartOffset} (0x{entry.FolderStartOffset:X})");
builder.AppendLine($" Folder index = {entry.FolderIndex} (0x{entry.FolderIndex:X})");
builder.AppendLine($" Date = {entry.Date} (0x{entry.Date:X})");
builder.AppendLine($" Time = {entry.Time} (0x{entry.Time:X})");
builder.AppendLine($" Attributes = {entry.Attributes} (0x{entry.Attributes:X})");
builder.AppendLine($" Name = {entry.Name ?? "[NULL]"}");
builder.AppendLine(entry.FileSize, " File size");
builder.AppendLine(entry.FolderStartOffset, " Folder start offset");
builder.AppendLine($" Folder index: {entry.FolderIndex} (0x{entry.FolderIndex:X})");
builder.AppendLine(entry.Date, " Date");
builder.AppendLine(entry.Time, " Time");
builder.AppendLine($" Attributes: {entry.Attributes} (0x{entry.Attributes:X})");
builder.AppendLine(entry.Name, " Name");
}
builder.AppendLine();
}