Example #1
0
        private string GetDebugInfoVersion16(NefsItem item, Nefs16Header h, NefsItemList items)
        {
            var p1         = h.Part1.EntriesByGuid[item.Guid];
            var p2         = h.Part2.EntriesByIndex[(int)p1.IndexPart2];
            var p6         = h.Part6.EntriesByGuid[item.Guid];
            var p7         = h.Part7.EntriesByIndex[(int)p1.IndexPart2];
            var numChunks  = h.TableOfContents.ComputeNumChunks(p2.ExtractedSize);
            var chunkSize  = h.TableOfContents.BlockSize;
            var attributes = p6.CreateAttributes();

            return($@"Item Info
-----------------------------------------------------------
Item name:                  {item.FileName}
Item path:                  {items.GetItemFilePath(item.Id)}

Part 1
-----------------------------------------------------------
Offset to data:             {p1.OffsetToData.ToString("X")}
Index in part 2:            {p1.IndexPart2.ToString("X")}
Index in part 4:            {p1.IndexPart4.ToString("X")}
Id:                         {p1.Id.Value.ToString("X")}

Part 2
-----------------------------------------------------------
Directory id:               {p2.DirectoryId.Value.ToString("X")}
First child id:             {p2.FirstChildId.Value.ToString("X")}
Offset in part 3:           {p2.OffsetIntoPart3.ToString("X")}
Extracted size:             {p2.ExtractedSize.ToString("X")}
Id:                         {p2.Id.Value.ToString("X")}

Part 4
-----------------------------------------------------------
Chunks                      {this.PrintChunkSizesToString(h.Part4.CreateChunksList(p1.IndexPart4, numChunks, chunkSize, h.Intro.GetAesKey()))}

Part 6
-----------------------------------------------------------
0x00:                       {p6.Volume.ToString("X")}
0x02:                       {((byte)p6.Flags).ToString("X")}
0x03:                       {p6.Unknown0x3.ToString("X")}

IsTransformed:              {attributes.V16IsTransformed}
IsDirectory:                {attributes.IsDirectory}
IsDuplicated:               {attributes.IsDuplicated}
IsCacheable:                {attributes.IsCacheable}
Unknown 0x10:               {attributes.V16Unknown0x10}
IsPatched:                  {attributes.IsPatched}
Unknown 0x40:               {attributes.V16Unknown0x40}
Unknown 0x80:               {attributes.V16Unknown0x80}

Part 7
-----------------------------------------------------------
Sibling id:                 {p7.SiblingId.Value.ToString("X")}
Item id:                    {p7.Id.Value.ToString("X")}
");
        }
        private string GetDebugInfoVersion16(Nefs16Header h, NefsArchiveSource source)
        {
            var headerPart1String = new StringBuilder();

            foreach (var entry in h.Part1.EntriesByIndex)
            {
                headerPart1String.Append($"0x{entry.OffsetToData.ToString("X")}".PadRight(20));
                headerPart1String.Append($"0x{entry.IndexPart2.ToString("X")}".PadRight(20));
                headerPart1String.Append($"0x{entry.IndexPart4.ToString("X")}".PadRight(20));
                headerPart1String.Append($"0x{entry.Id.Value.ToString("X")}".PadRight(20));
                headerPart1String.Append("\n");
            }

            var headerPart2String = new StringBuilder();

            foreach (var entry in h.Part2.EntriesByIndex)
            {
                headerPart2String.Append($"0x{entry.DirectoryId.Value.ToString("X")}".PadRight(20));
                headerPart2String.Append($"0x{entry.FirstChildId.Value.ToString("X")}".PadRight(20));
                headerPart2String.Append($"0x{entry.OffsetIntoPart3.ToString("X")}".PadRight(20));
                headerPart2String.Append($"0x{entry.ExtractedSize.ToString("X")}".PadRight(20));
                headerPart2String.Append($"0x{entry.Id.Value.ToString("X")}".PadRight(20));
                headerPart2String.Append("\n");
            }

            var headerPart3String = new StringBuilder();

            foreach (var s in h.Part3.FileNames)
            {
                headerPart3String.AppendLine(s);
            }

            var headerPart6String = new StringBuilder();

            foreach (var entry in h.Part6.EntriesByIndex)
            {
                headerPart6String.Append($"0x{entry.Volume.ToString("X")}".PadRight(20));
                headerPart6String.Append($"0x{((byte)entry.Flags).ToString("X")}".PadRight(20));
                headerPart6String.Append($"0x{entry.Unknown0x3.ToString("X")}".PadRight(20));
                headerPart6String.Append("\n");
            }

            var headerPart7String = new StringBuilder();

            foreach (var entry in h.Part7.EntriesByIndex)
            {
                headerPart7String.Append($"0x{entry.SiblingId.Value.ToString("X")}".PadRight(20));
                headerPart7String.Append($"0x{entry.Id.Value.ToString("X")}".PadRight(20));
                headerPart7String.Append("\n");
            }

            return($@"Archive Source
-----------------------------------------------------------
Header source file:         {source.HeaderFilePath}
Header offset:              {source.HeaderOffset.ToString("X")}
Data file path:             {source.DataFilePath}
Is header/data separate:    {source.IsHeaderSeparate}

General Info
-----------------------------------------------------------
Archive Size:               {h.Part5.ArchiveSize.ToString("X")}
Is Header Encrypted?        {h.Intro.IsEncrypted}

Header size:                {h.Intro.HeaderSize.ToString("X")}
Intro size:                 {NefsHeaderIntro.Size.ToString("X")}
Toc size:                   {Nefs16HeaderIntroToc.Size.ToString("X")}
Part 1 size:                {h.TableOfContents.Part1Size.ToString("X")}
Part 2 size:                {h.TableOfContents.Part2Size.ToString("X")}
Part 3 size:                {h.TableOfContents.Part3Size.ToString("X")}
Part 4 size:                {h.TableOfContents.Part4Size.ToString("X")}
Part 8 size:                {(h.Intro.HeaderSize - h.TableOfContents.OffsetToPart8).ToString("X")}

Header Intro
-----------------------------------------------------------
Magic Number:               {h.Intro.MagicNumber.ToString("X")}
Expected SHA-256 hash:      {StringHelper.ByteArrayToString(h.Intro.ExpectedHash)}
AES 256 key hex string:     {StringHelper.ByteArrayToString(h.Intro.AesKeyHexString)}
Header size:                {h.Intro.HeaderSize.ToString("X")}
NeFS version:               {h.Intro.NefsVersion.ToString("X")}
Number of items:            {h.Intro.NumberOfItems.ToString("X")}
Unknown 0x70:               {h.Intro.Unknown0x70zlib.ToString("X")}
Unknown 0x78:               {h.Intro.Unknown0x78.ToString("X")}

Header Table of Contents
-----------------------------------------------------------
Offset to Part 1:           {h.TableOfContents.OffsetToPart1.ToString("X")}
Offset to Part 2:           {h.TableOfContents.OffsetToPart2.ToString("X")}
Offset to Part 3:           {h.TableOfContents.OffsetToPart3.ToString("X")}
Offset to Part 4:           {h.TableOfContents.OffsetToPart4.ToString("X")}
Offset to Part 5:           {h.TableOfContents.OffsetToPart5.ToString("X")}
Offset to Part 6:           {h.TableOfContents.OffsetToPart6.ToString("X")}
Offset to Part 7:           {h.TableOfContents.OffsetToPart7.ToString("X")}
Offset to Part 8:           {h.TableOfContents.OffsetToPart8.ToString("X")}
Num Volumes:                {h.TableOfContents.NumVolumes.ToString("X")}
Hash Block Size (<< 15):    {h.TableOfContents.HashBlockSize.ToString("X")}
Block Size (<< 15):         {h.TableOfContents.BlockSize.ToString("X")}
Split Size (<< 15):         {h.TableOfContents.SplitSize.ToString("X")}
Unknown 0x28:               {StringHelper.ByteArrayToString(h.TableOfContents.Unknown0x28)}

Header Part 1
-----------------------------------------------------------
Data Offset         Index Part 2       Index Part 4        Id
{headerPart1String.ToString()}
Header Part 2
-----------------------------------------------------------
Directory Id        First child Id      Part 3 offset       Extracted size      Id
{headerPart2String.ToString()}
Header Part 3
-----------------------------------------------------------
{headerPart3String.ToString()}
Header Part 4
-----------------------------------------------------------
Number of entries:          {h.Part4.EntriesByIndex.Count.ToString("X")}

Header Part 5
-----------------------------------------------------------
Archive size:               {h.Part5.ArchiveSize.ToString("X")}
First data offset:          {h.Part5.FirstDataOffset.ToString("X")}
Archive name string offset: {h.Part5.ArchiveNameStringOffset.ToString("X")}

Header Part 6
-----------------------------------------------------------
{headerPart6String.ToString()}
Header Part 7
-----------------------------------------------------------
{headerPart7String.ToString()}
");
        }