From 24c77ecd0746dfe129b9097763f13990e7b8aec2 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Mon, 5 Dec 2022 15:56:37 -0800 Subject: [PATCH] Add header padding data for searching --- BurnOutSharp.Wrappers/PortableExecutable.cs | 32 +++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/BurnOutSharp.Wrappers/PortableExecutable.cs b/BurnOutSharp.Wrappers/PortableExecutable.cs index a9925a2b..585a5f1b 100644 --- a/BurnOutSharp.Wrappers/PortableExecutable.cs +++ b/BurnOutSharp.Wrappers/PortableExecutable.cs @@ -325,6 +325,33 @@ namespace BurnOutSharp.Wrappers #region Extension Properties + /// + /// Header padding data, if it exists + /// + public byte[] HeaderPaddingData + { + get + { + lock (_sourceDataLock) + { + // If we already have cached data, just use that immediately + if (_headerPaddingData != null) + return _headerPaddingData; + + // TODO: Don't scan the known header data as well + + // Populate the raw header padding data based on the source + uint headerStartAddress = Stub_NewExeHeaderAddr; + uint firstSectionAddress = SectionTable.Select(s => s.PointerToRawData).Where(s => s != 0).OrderBy(s => s).First(); + int headerLength = (int)(firstSectionAddress - headerStartAddress); + _headerPaddingData = ReadFromDataSource((int)headerStartAddress, headerLength); + + // Cache and return the header padding data, even if null + return _headerPaddingData; + } + } + } + /// /// Overlay data, if it exists /// @@ -606,6 +633,11 @@ namespace BurnOutSharp.Wrappers /// private Models.PortableExecutable.Executable _executable; + /// + /// Header padding data, if it exists + /// + private byte[] _headerPaddingData = null; + /// /// Overlay data, if it exists ///