mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-04-24 15:13:23 +00:00
Add PE message resource printing, fix parsing
This commit is contained in:
@@ -1167,7 +1167,7 @@ namespace BurnOutSharp.Builder
|
||||
// Message resource entries
|
||||
if (messageResourceData.Blocks != null && messageResourceData.Blocks.Length != 0)
|
||||
{
|
||||
var messageResourceEntries = new List<Models.PortableExecutable.MessageResourceEntry>();
|
||||
var messageResourceEntries = new Dictionary<uint, Models.PortableExecutable.MessageResourceEntry>();
|
||||
|
||||
for (int i = 0; i < messageResourceData.Blocks.Length; i++)
|
||||
{
|
||||
@@ -1182,13 +1182,14 @@ namespace BurnOutSharp.Builder
|
||||
messageResourceEntry.Flags = entry.Data.ReadUInt16(ref offset);
|
||||
|
||||
Encoding textEncoding = messageResourceEntry.Flags == 0x0001 ? Encoding.Unicode : Encoding.ASCII;
|
||||
messageResourceEntry.Text = entry.Data.ReadString(ref offset, textEncoding);
|
||||
byte[] textArray = entry.Data.ReadBytes(ref offset, messageResourceEntry.Length - 4);
|
||||
messageResourceEntry.Text = textEncoding.GetString(textArray);
|
||||
|
||||
messageResourceEntries.Add(messageResourceEntry);
|
||||
messageResourceEntries[j] = messageResourceEntry;
|
||||
}
|
||||
}
|
||||
|
||||
messageResourceData.Entries = messageResourceEntries.ToArray();
|
||||
messageResourceData.Entries = messageResourceEntries;
|
||||
}
|
||||
|
||||
return messageResourceData;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
namespace BurnOutSharp.Models.PortableExecutable
|
||||
using System.Collections.Generic;
|
||||
|
||||
namespace BurnOutSharp.Models.PortableExecutable
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains information about formatted text for display as an error message or in a message
|
||||
@@ -20,6 +22,6 @@
|
||||
/// <summary>
|
||||
/// Message resource entries
|
||||
/// </summary>
|
||||
public MessageResourceEntry[] Entries;
|
||||
public Dictionary<uint, MessageResourceEntry> Entries;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1429,7 +1429,58 @@ namespace ExecutableTest
|
||||
Console.WriteLine($"{padding}Application-defined resource found, not parsed yet");
|
||||
break;
|
||||
case BurnOutSharp.Models.PortableExecutable.ResourceType.RT_MESSAGETABLE:
|
||||
Console.WriteLine($"{padding}Message-table entry found, not parsed yet");
|
||||
var messageTable = entry.AsMessageResourceData();
|
||||
if (messageTable == null)
|
||||
{
|
||||
Console.WriteLine($"{padding}Message resource data found, but malformed");
|
||||
}
|
||||
else
|
||||
{
|
||||
Console.WriteLine($"{padding}Number of blocks: {messageTable.NumberOfBlocks}");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine($"{padding}Message resource blocks");
|
||||
Console.WriteLine($"{padding}-------------------------");
|
||||
if (messageTable.NumberOfBlocks == 0
|
||||
|| messageTable.Blocks == null
|
||||
|| messageTable.Blocks.Length == 0)
|
||||
{
|
||||
Console.WriteLine($"{padding}No message resource blocks");
|
||||
}
|
||||
else
|
||||
{
|
||||
for (int i = 0; i < messageTable.Blocks.Length; i++)
|
||||
{
|
||||
var messageResourceBlock = messageTable.Blocks[i];
|
||||
|
||||
Console.WriteLine($"{padding}Message resource block {i}");
|
||||
Console.WriteLine($"{padding} Low ID: {messageResourceBlock.LowId}");
|
||||
Console.WriteLine($"{padding} High ID: {messageResourceBlock.HighId}");
|
||||
Console.WriteLine($"{padding} Offset to entries: {messageResourceBlock.OffsetToEntries}");
|
||||
}
|
||||
}
|
||||
Console.WriteLine();
|
||||
|
||||
Console.WriteLine($"{padding}Message resource entries");
|
||||
Console.WriteLine($"{padding}-------------------------");
|
||||
if (messageTable.Entries == null
|
||||
|| messageTable.Entries.Count == 0)
|
||||
{
|
||||
Console.WriteLine($"{padding}No message resource entries");
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var kvp in messageTable.Entries)
|
||||
{
|
||||
uint index = kvp.Key;
|
||||
var messageResourceEntry = kvp.Value;
|
||||
|
||||
Console.WriteLine($"{padding}Message resource entry {index}");
|
||||
Console.WriteLine($"{padding} Length: {messageResourceEntry.Length}");
|
||||
Console.WriteLine($"{padding} Flags: {messageResourceEntry.Flags}");
|
||||
Console.WriteLine($"{padding} Text: {messageResourceEntry.Text}");
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
case BurnOutSharp.Models.PortableExecutable.ResourceType.RT_GROUP_CURSOR:
|
||||
Console.WriteLine($"{padding}Hardware-independent cursor resource found, not parsed yet");
|
||||
|
||||
Reference in New Issue
Block a user