From 13eb37cc466de84fd1c1c21daf63d28ba39b8537 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Wed, 9 Nov 2022 16:17:40 -0800 Subject: [PATCH] Add full PE file info printing --- BurnOutSharp.Builder/Extensions.cs | 8 +++ ExecutableTest/Program.cs | 91 +++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 1 deletion(-) diff --git a/BurnOutSharp.Builder/Extensions.cs b/BurnOutSharp.Builder/Extensions.cs index 14247fe6..9f8690e5 100644 --- a/BurnOutSharp.Builder/Extensions.cs +++ b/BurnOutSharp.Builder/Extensions.cs @@ -566,6 +566,10 @@ namespace BurnOutSharp.Builder stringData.Value = entry.Data.ReadString(ref offset, Encoding.Unicode); + // TODO: Is this necessary? + while ((offset % 4) != 0) + _ = entry.Data.ReadUInt16(ref offset); + stringTableChildren.Add(stringData); } @@ -677,6 +681,10 @@ namespace BurnOutSharp.Builder stringData.Value = entry.Data.ReadString(ref offset, Encoding.Unicode); + // TODO: Is this necessary? + while ((offset % 4) != 0) + _ = entry.Data.ReadUInt16(ref offset); + stringTableChildren.Add(stringData); } diff --git a/ExecutableTest/Program.cs b/ExecutableTest/Program.cs index ed499d59..b539a1b9 100644 --- a/ExecutableTest/Program.cs +++ b/ExecutableTest/Program.cs @@ -938,7 +938,96 @@ namespace ExecutableTest } else { - // TODO: Add pretty-printing for version info + Console.WriteLine($"{padding}Length: {versionInfo.Length}"); + Console.WriteLine($"{padding}Value length: {versionInfo.ValueLength}"); + Console.WriteLine($"{padding}Resource type: {versionInfo.ResourceType}"); + Console.WriteLine($"{padding}Key: {versionInfo.Key}"); + if (versionInfo.ValueLength != 0 && versionInfo.Value != null) + { + Console.WriteLine($"{padding}[Fixed File Info] Signature: {versionInfo.Value.Signature}"); + Console.WriteLine($"{padding}[Fixed File Info] Struct version: {versionInfo.Value.StrucVersion}"); + Console.WriteLine($"{padding}[Fixed File Info] File version (MS): {versionInfo.Value.FileVersionMS}"); + Console.WriteLine($"{padding}[Fixed File Info] File version (LS): {versionInfo.Value.FileVersionLS}"); + Console.WriteLine($"{padding}[Fixed File Info] Product version (MS): {versionInfo.Value.ProductVersionMS}"); + Console.WriteLine($"{padding}[Fixed File Info] Product version (LS): {versionInfo.Value.ProductVersionLS}"); + Console.WriteLine($"{padding}[Fixed File Info] File flags mask: {versionInfo.Value.FileFlagsMask}"); + Console.WriteLine($"{padding}[Fixed File Info] File flags: {versionInfo.Value.FileFlags}"); + Console.WriteLine($"{padding}[Fixed File Info] File OS: {versionInfo.Value.FileOS}"); + Console.WriteLine($"{padding}[Fixed File Info] Type: {versionInfo.Value.FileType}"); + Console.WriteLine($"{padding}[Fixed File Info] Subtype: {versionInfo.Value.FileSubtype}"); + Console.WriteLine($"{padding}[Fixed File Info] File date (MS): {versionInfo.Value.FileDateMS}"); + Console.WriteLine($"{padding}[Fixed File Info] File date (LS): {versionInfo.Value.FileDateLS}"); + } + if (versionInfo.StringFileInfo != null) + { + Console.WriteLine($"{padding}[String File Info] Length: {versionInfo.StringFileInfo.Length}"); + Console.WriteLine($"{padding}[String File Info] Value length: {versionInfo.StringFileInfo.ValueLength}"); + Console.WriteLine($"{padding}[String File Info] Resource type: {versionInfo.StringFileInfo.ResourceType}"); + Console.WriteLine($"{padding}[String File Info] Key: {versionInfo.StringFileInfo.Key}"); + Console.WriteLine($"{padding}Children:"); + Console.WriteLine($"{padding}-------------------------"); + if (versionInfo.StringFileInfo.Children == null || versionInfo.StringFileInfo.Children.Length == 0) + { + Console.WriteLine($"{padding}No string file info children"); + } + else + { + for (int i = 0; i < versionInfo.StringFileInfo.Children.Length; i++) + { + var stringFileInfoChildEntry = versionInfo.StringFileInfo.Children[i]; + + Console.WriteLine($"{padding} [String Table {i}] Length: {stringFileInfoChildEntry.Length}"); + Console.WriteLine($"{padding} [String Table {i}] Value length: {stringFileInfoChildEntry.ValueLength}"); + Console.WriteLine($"{padding} [String Table {i}] ResourceType: {stringFileInfoChildEntry.ResourceType}"); + Console.WriteLine($"{padding} [String Table {i}] Key: {stringFileInfoChildEntry.Key}"); + Console.WriteLine($"{padding} [String Table {i}] Children:"); + Console.WriteLine($"{padding} -------------------------"); + if (stringFileInfoChildEntry.Children == null || stringFileInfoChildEntry.Children.Length == 0) + { + Console.WriteLine($"{padding} No string table {i} children"); + } + else + { + for (int j = 0; j < stringFileInfoChildEntry.Children.Length; j++) + { + var stringDataEntry = stringFileInfoChildEntry.Children[j]; + + Console.WriteLine($"{padding} [String Data {j}] Length: {stringDataEntry.Length}"); + Console.WriteLine($"{padding} [String Data {j}] Value length: {stringDataEntry.ValueLength}"); + Console.WriteLine($"{padding} [String Data {j}] ResourceType: {stringDataEntry.ResourceType}"); + Console.WriteLine($"{padding} [String Data {j}] Key: {stringDataEntry.Key}"); + Console.WriteLine($"{padding} [String Data {j}] Value: {stringDataEntry.Value}"); + } + } + } + } + } + if (versionInfo.VarFileInfo != null) + { + Console.WriteLine($"{padding}[Var File Info] Length: {versionInfo.VarFileInfo.Length}"); + Console.WriteLine($"{padding}[Var File Info] Value length: {versionInfo.VarFileInfo.ValueLength}"); + Console.WriteLine($"{padding}[Var File Info] Resource type: {versionInfo.VarFileInfo.ResourceType}"); + Console.WriteLine($"{padding}[Var File Info] Key: {versionInfo.VarFileInfo.Key}"); + Console.WriteLine($"{padding}Children:"); + Console.WriteLine($"{padding}-------------------------"); + if (versionInfo.VarFileInfo.Children == null || versionInfo.VarFileInfo.Children.Length == 0) + { + Console.WriteLine($"{padding}No var file info children"); + } + else + { + for (int i = 0; i < versionInfo.VarFileInfo.Children.Length; i++) + { + var varFileInfoChildEntry = versionInfo.VarFileInfo.Children[i]; + + Console.WriteLine($"{padding} [String Table {i}] Length: {varFileInfoChildEntry.Length}"); + Console.WriteLine($"{padding} [String Table {i}] Value length: {varFileInfoChildEntry.ValueLength}"); + Console.WriteLine($"{padding} [String Table {i}] ResourceType: {varFileInfoChildEntry.ResourceType}"); + Console.WriteLine($"{padding} [String Table {i}] Key: {varFileInfoChildEntry.Key}"); + Console.WriteLine($"{padding} [String Table {i}] Value: {string.Join(",", varFileInfoChildEntry.Value)}"); + } + } + } } break; case BurnOutSharp.Models.PortableExecutable.ResourceType.RT_DLGINCLUDE: