From e095e55e69f351e33f80e778c2c7023cbee08dea Mon Sep 17 00:00:00 2001 From: Washi Date: Tue, 14 Jun 2022 16:15:39 +0200 Subject: [PATCH 1/6] Add DataSourceSlice. --- src/AsmResolver/IO/DataSourceSlice.cs | 68 ++++++++++++++++++ .../IO/DataSourceSliceTest.cs | 70 +++++++++++++++++++ 2 files changed, 138 insertions(+) create mode 100644 src/AsmResolver/IO/DataSourceSlice.cs create mode 100644 test/AsmResolver.Tests/IO/DataSourceSliceTest.cs diff --git a/src/AsmResolver/IO/DataSourceSlice.cs b/src/AsmResolver/IO/DataSourceSlice.cs new file mode 100644 index 000000000..f107316a0 --- /dev/null +++ b/src/AsmResolver/IO/DataSourceSlice.cs @@ -0,0 +1,68 @@ +using System; + +namespace AsmResolver.IO +{ + /// + /// Represents a data source that only exposes a part (slice) of another data source. + /// + public class DataSourceSlice : IDataSource + { + private readonly IDataSource _source; + + /// + /// Creates a new data source slice. + /// + /// The original data source to slice. + /// The starting address. + /// The number of bytes. + /// + /// Occurs when and/or result in addresses that are invalid + /// in the original data source. + /// + public DataSourceSlice(IDataSource source, ulong start, ulong length) + { + _source = source; + + if (!source.IsValidAddress(start)) + throw new ArgumentOutOfRangeException(nameof(start)); + if (length > 0 && !source.IsValidAddress(start + length - 1)) + throw new ArgumentOutOfRangeException(nameof(length)); + + BaseAddress = start; + Length = length; + } + + /// + public ulong BaseAddress + { + get; + } + + /// + public ulong Length + { + get; + } + + /// + public byte this[ulong address] + { + get + { + if (!IsValidAddress(address)) + throw new IndexOutOfRangeException(); + return _source[address]; + } + } + + /// + public bool IsValidAddress(ulong address) => address >= BaseAddress && address - BaseAddress < Length; + + /// + public int ReadBytes(ulong address, byte[] buffer, int index, int count) + { + int maxCount = Math.Max(0, (int) (Length - (address - BaseAddress))); + return _source.ReadBytes(address, buffer, index, Math.Min(maxCount, count)); + } + } +} diff --git a/test/AsmResolver.Tests/IO/DataSourceSliceTest.cs b/test/AsmResolver.Tests/IO/DataSourceSliceTest.cs new file mode 100644 index 000000000..937e79993 --- /dev/null +++ b/test/AsmResolver.Tests/IO/DataSourceSliceTest.cs @@ -0,0 +1,70 @@ +using System; +using System.Linq; +using AsmResolver.IO; +using Xunit; + +namespace AsmResolver.Tests.IO +{ + public class DataSourceSliceTest + { + private readonly IDataSource _source = new ByteArrayDataSource(new byte[] + { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 + }); + + [Fact] + public void EmptySlice() + { + var slice = new DataSourceSlice(_source, 0, 0); + Assert.Equal(0ul, slice.Length); + } + + [Fact] + public void SliceStart() + { + var slice = new DataSourceSlice(_source, 0, 5); + Assert.Equal(5ul, slice.Length); + Assert.All(Enumerable.Range(0, 5), i => Assert.Equal(slice[(ulong) i], _source[(ulong) i])); + Assert.Throws(() => slice[5]); + } + + [Fact] + public void SliceMiddle() + { + var slice = new DataSourceSlice(_source, 3, 5); + Assert.Equal(5ul, slice.Length); + Assert.All(Enumerable.Range(3, 5), i => Assert.Equal(slice[(ulong) i], _source[(ulong) i])); + Assert.Throws(() => slice[3 - 1]); + Assert.Throws(() => slice[3 + 5]); + } + + [Fact] + public void SliceEnd() + { + var slice = new DataSourceSlice(_source, 5, 5); + Assert.Equal(5ul, slice.Length); + Assert.All(Enumerable.Range(5, 5), i => Assert.Equal(slice[(ulong) i], _source[(ulong) i])); + Assert.Throws(() => slice[5 - 1]); + } + + [Fact] + public void ReadSlicedShouldReadUpToSliceAmountOfBytes() + { + var slice = new DataSourceSlice(_source, 3, 5); + + byte[] data1 = new byte[7]; + int originalCount = _source.ReadBytes(3, data1, 0, data1.Length); + Assert.Equal(7, originalCount); + + byte[] data2 = new byte[3]; + int newCount = slice.ReadBytes(3, data2, 0, data2.Length); + Assert.Equal(3, newCount); + Assert.Equal(data1.Take(3), data2.Take(3)); + + byte[] data3 = new byte[7]; + int newCount2 = slice.ReadBytes(3, data3, 0, data3.Length); + Assert.Equal(5, newCount2); + Assert.Equal(data1.Take(5), data3.Take(5)); + } + } +} From 0d86462555b264a7d54fb16233987b5222713cc9 Mon Sep 17 00:00:00 2001 From: Washi Date: Tue, 14 Jun 2022 17:25:25 +0200 Subject: [PATCH 2/6] Add basic MSF 7.0 file read support. --- AsmResolver.sln | 30 +++++ .../AsmResolver.Symbols.WindowsPdb.csproj | 26 ++++ .../Msf/MsfFile.cs | 120 +++++++++++++++++ .../Msf/MsfStream.cs | 65 +++++++++ .../Msf/MsfStreamDataSource.cs | 109 +++++++++++++++ .../Msf/SerializedMsfFile.cs | 127 ++++++++++++++++++ ...smResolver.Symbols.WindowsPdb.Tests.csproj | 42 ++++++ .../Msf/MsfStreamDataSourceTest.cs | 81 +++++++++++ .../Properties/Resources.Designer.cs | 55 ++++++++ .../Properties/Resources.resx | 24 ++++ .../Resources/.gitignore | 1 + .../Resources/SimpleDll.pdb | Bin 0 -> 823296 bytes 12 files changed, 680 insertions(+) create mode 100644 src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStreamDataSource.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/AsmResolver.Symbols.WindowsPdb.Tests.csproj create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.Designer.cs create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.resx create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/.gitignore create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/SimpleDll.pdb diff --git a/AsmResolver.sln b/AsmResolver.sln index 5b61c298f..cee77d8fe 100644 --- a/AsmResolver.sln +++ b/AsmResolver.sln @@ -85,6 +85,10 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Directory.Build.props = Directory.Build.props EndProjectSection EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsmResolver.Symbols.WindowsPdb", "src\AsmResolver.Symbols.WindowsPdb\AsmResolver.Symbols.WindowsPdb.csproj", "{9E311832-D0F2-42CA-84DD-9A91B88F0287}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AsmResolver.Symbols.WindowsPdb.Tests", "test\AsmResolver.Symbols.WindowsPdb.Tests\AsmResolver.Symbols.WindowsPdb.Tests.csproj", "{AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -423,6 +427,30 @@ Global {2D1DF5DA-7367-4490-B3F0-B996348E150B}.Release|x64.Build.0 = Release|Any CPU {2D1DF5DA-7367-4490-B3F0-B996348E150B}.Release|x86.ActiveCfg = Release|Any CPU {2D1DF5DA-7367-4490-B3F0-B996348E150B}.Release|x86.Build.0 = Release|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Debug|x64.ActiveCfg = Debug|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Debug|x64.Build.0 = Debug|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Debug|x86.ActiveCfg = Debug|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Debug|x86.Build.0 = Debug|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Release|Any CPU.Build.0 = Release|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Release|x64.ActiveCfg = Release|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Release|x64.Build.0 = Release|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Release|x86.ActiveCfg = Release|Any CPU + {9E311832-D0F2-42CA-84DD-9A91B88F0287}.Release|x86.Build.0 = Release|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Debug|x64.ActiveCfg = Debug|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Debug|x64.Build.0 = Debug|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Debug|x86.ActiveCfg = Debug|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Debug|x86.Build.0 = Debug|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Release|Any CPU.Build.0 = Release|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Release|x64.ActiveCfg = Release|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Release|x64.Build.0 = Release|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Release|x86.ActiveCfg = Release|Any CPU + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -460,6 +488,8 @@ Global {40483E28-C703-4933-BA5B-9512EF6E6A21} = {EA971BB0-94BA-44DB-B16C-212D2DB27E17} {CF6A7E02-37DC-4963-AC14-76D74ADCD87A} = {B3AF102B-ABE1-41B2-AE48-C40702F45AB0} {2D1DF5DA-7367-4490-B3F0-B996348E150B} = {B3AF102B-ABE1-41B2-AE48-C40702F45AB0} + {9E311832-D0F2-42CA-84DD-9A91B88F0287} = {34A95168-A162-4F6A-803B-B6F221FE9EA6} + {AAD604B6-ABE5-4DBC-A2D9-4EF8E815B2EE} = {786C1732-8C96-45DD-97BB-639C9AA7F45B} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {3302AC79-6D23-4E7D-8C5F-C0C7261044D0} diff --git a/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj b/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj new file mode 100644 index 000000000..1f1099b04 --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj @@ -0,0 +1,26 @@ + + + + AsmResolver + Windows PDB models for the AsmResolver executable file inspection toolsuite. + windows pdb symbols + enable + net6.0;netcoreapp3.1;netstandard2.0 + true + + + + true + bin\Debug\netstandard2.0\AsmResolver.Symbols.WindowsPdb.xml + + + + true + bin\Release\netstandard2.0\AsmResolver.xml + + + + + + + diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs new file mode 100644 index 000000000..058ea7824 --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs @@ -0,0 +1,120 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf; + +/// +/// Models a file that is in the Microsoft Multi-Stream Format (MSF). +/// +public class MsfFile +{ + // Used in MSF v2.0 + internal static readonly byte[] SmallMsfSignature = + { + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x32, 0x2e, 0x30, + 0x30, 0x0d, 0x0a, 0x1a, 0x4a, 0x47 + }; + + // Used in MSF v7.0 + internal static readonly byte[] BigMsfSignature = + { + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, + 0x4d, 0x53, 0x46, 0x20, 0x37, 0x2e, 0x30, 0x30, 0x0d, 0x0a, 0x1a, 0x44, 0x53, 0x00, 0x00, 0x00 + }; + + private uint _blockSize; + private IList? _streams; + + /// + /// Gets or sets the size of each block in the MSF file. + /// + /// + /// Occurs when the provided value is neither 512, 1024, 2048 or 4096. + /// + public uint BlockSize + { + get => _blockSize; + set + { + if (_blockSize is 512 or 1024 or 2048 or 4096) + { + throw new ArgumentOutOfRangeException( + nameof(value), + "Block size must be either 512, 1024, 2048 or 4096 bytes."); + } + + _blockSize = value; + } + } + + /// + /// Gets a collection of streams that are present in the MSF file. + /// + public IList Streams + { + get + { + if (_streams is null) + Interlocked.CompareExchange(ref _streams, GetStreams(), null); + return _streams; + } + } + + /// + /// Creates a new empty MSF file with a default block size of 4096. + /// + public MsfFile() + : this(4096) + { + } + + /// + /// Creates a new empty MSF file with the provided block size. + /// + /// The block size to use. This must be a value of 512, 1024, 2048 or 4096. + /// Occurs when an invalid block size was provided. + public MsfFile(uint blockSize) + { + BlockSize = blockSize; + } + + /// + /// Reads an MSF file from a file on the disk. + /// + /// The path to the file to read. + /// The read MSF file. + public static MsfFile FromFile(string path) => FromFile(UncachedFileService.Instance.OpenFile(path)); + + /// + /// Reads an MSF file from an input file. + /// + /// The file to read. + /// The read MSF file. + public static MsfFile FromFile(IInputFile file) => FromReader(file.CreateReader()); + + /// + /// Interprets a byte array as an MSF file. + /// + /// The data to interpret. + /// The read MSF file. + public static MsfFile FromBytes(byte[] data) => FromReader(ByteArrayDataSource.CreateReader(data)); + + /// + /// Reads an MSF file from the provided input stream reader. + /// + /// The reader. + /// The read MSF file. + public static MsfFile FromReader(BinaryStreamReader reader) => new SerializedMsfFile(reader); + + /// + /// Obtains the list of streams stored in the MSF file. + /// + /// The streams. + /// + /// This method is called upon initialization of the property. + /// + protected virtual IList GetStreams() => new List(); +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs new file mode 100644 index 000000000..cd8115dfa --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf; + +/// +/// Represents a single stream in an Multi-Stream Format (MSF) file. +/// +public class MsfStream +{ + /// + /// Creates a new MSF stream with the provided contents. + /// + /// The raw data of the stream. + public MsfStream(byte[] data) + : this(new ByteArrayDataSource(data)) + { + } + + /// + /// Creates a new MSF stream with the provided data source as contents. + /// + /// The data source containing the raw data of the stream. + public MsfStream(IDataSource contents) + { + Contents = contents; + Blocks = Array.Empty(); + } + + /// + /// Initializes an MSF stream with a data source and a list of original block indices that the stream was based on. + /// + /// The data source containing the raw data of the stream. + /// The original block indices. + public MsfStream(IDataSource contents, IEnumerable blocks) + { + Contents = contents; + Blocks = blocks.ToArray(); + } + + /// + /// Gets or sets the contents of the stream. + /// + public IDataSource Contents + { + get; + set; + } + + /// + /// Gets a collection of block indices that this stream was based of (if available). + /// + public IReadOnlyList Blocks + { + get; + } + + /// + /// Creates a new binary reader that reads the raw contents of the stream. + /// + /// The constructed binary reader. + public BinaryStreamReader CreateReader() => new(Contents, Contents.BaseAddress, 0, (uint) Contents.Length); +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStreamDataSource.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStreamDataSource.cs new file mode 100644 index 000000000..08e43ef2d --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStreamDataSource.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf; + +/// +/// Implements a data source for a single MSF stream that pulls data from multiple (fragmented) blocks. +/// +public class MsfStreamDataSource : IDataSource +{ + private readonly IDataSource[] _blocks; + private readonly long _blockSize; + + /// + /// Creates a new MSF stream data source. + /// + /// The length of the stream. + /// The size of an individual block. + /// The blocks + /// + /// Occurs when the total size of the provided blocks is smaller than + /// * . + /// + public MsfStreamDataSource(ulong length, uint blockSize, IEnumerable blocks) + : this(length, blockSize, blocks.Select(x => new ByteArrayDataSource(x))) + { + } + + /// + /// Creates a new MSF stream data source. + /// + /// The length of the stream. + /// The size of an individual block. + /// The blocks + /// + /// Occurs when the total size of the provided blocks is smaller than + /// * . + /// + public MsfStreamDataSource(ulong length, uint blockSize, IEnumerable blocks) + { + Length = length; + _blocks = blocks.ToArray(); + _blockSize = blockSize; + + if (length > (ulong) (_blocks.Length * blockSize)) + throw new ArgumentException("Provided length is larger than the provided blocks combined."); + } + + /// + public ulong BaseAddress => 0; + + /// + public ulong Length + { + get; + } + + /// + public byte this[ulong address] + { + get + { + if (!IsValidAddress(address)) + throw new IndexOutOfRangeException(); + + var block = GetBlockAndOffset(address, out ulong offset); + return block[block.BaseAddress + offset]; + } + } + + /// + public bool IsValidAddress(ulong address) => address < Length; + + /// + public int ReadBytes(ulong address, byte[] buffer, int index, int count) + { + int totalReadCount = 0; + int remainingBytes = Math.Min(count, (int) (Length - (address - BaseAddress))); + + while (remainingBytes > 0) + { + // Obtain current block and offset within block. + var block = GetBlockAndOffset(address, out ulong offset); + + // Read available bytes. + int readCount = Math.Min(remainingBytes, (int) _blockSize); + int actualReadCount = block.ReadBytes(block.BaseAddress + offset, buffer, index, readCount); + + // Move to the next block. + totalReadCount += actualReadCount; + address += (ulong) actualReadCount; + index += actualReadCount; + remainingBytes -= actualReadCount; + } + + return totalReadCount; + } + + [MethodImpl(MethodImplOptions.AggressiveInlining)] + private IDataSource GetBlockAndOffset(ulong address, out ulong offset) + { + var block = _blocks[Math.DivRem((long) address, _blockSize, out long x)]; + offset = (ulong) x; + return block; + } +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs new file mode 100644 index 000000000..21d488bf9 --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf; + +/// +/// Provides an implementation for an MSF file version, read from an input file. +/// +/// +/// Currently, this model only supports version 7.0 of the file format. +/// +public class SerializedMsfFile : MsfFile +{ + private readonly BinaryStreamReader _reader; + private readonly uint _originalBlockSize; + + private readonly IDataSource?[] _blocks; + private readonly uint _directoryByteCount; + private readonly int _blockMapIndex; + + /// + /// Interprets an input stream as an MSF file version 7.0. + /// + /// The input stream. + /// Occurs when the MSF file is malformed. + public SerializedMsfFile(BinaryStreamReader reader) + { + // Check MSF header. + byte[] signature = new byte[BigMsfSignature.Length]; + int count = reader.ReadBytes(signature, 0, signature.Length); + if (count != BigMsfSignature.Length || !ByteArrayEqualityComparer.Instance.Equals(signature, BigMsfSignature)) + throw new BadImageFormatException("File does not start with a valid or supported MSF file signature."); + + // BlockSize property also validates, so no need to do it again. + BlockSize = _originalBlockSize = reader.ReadUInt32(); + + // We don't really use the free block map as we are not fully implementing the NTFS-esque file system, but we + // validate its contents regardless as a sanity check. + int freeBlockMapIndex = reader.ReadInt32(); + if (freeBlockMapIndex is not (1 or 2)) + throw new BadImageFormatException($"Free block map index must be 1 or 2, but was {freeBlockMapIndex}."); + + int blockCount = reader.ReadInt32(); + _blocks = new IDataSource?[blockCount]; + + _directoryByteCount = reader.ReadUInt32(); + reader.Offset += sizeof(uint); + _blockMapIndex = reader.ReadInt32(); + + _reader = reader; + } + + private IDataSource GetBlock(int index) + { + if (_blocks[index] is null) + { + // We lazily initialize all blocks by slicing the original data source of the reader. + var block = new DataSourceSlice( + _reader.DataSource, + _reader.DataSource.BaseAddress + (ulong) (index * _originalBlockSize), + _originalBlockSize); + + Interlocked.CompareExchange(ref _blocks[index], block, null); + } + + return _blocks[index]!; + } + + /// + protected override IList GetStreams() + { + // Get the block indices of the Stream Directory stream. + var indicesBlock = GetBlock(_blockMapIndex); + var indicesReader = new BinaryStreamReader(indicesBlock, indicesBlock.BaseAddress, 0, + GetBlockCount(_directoryByteCount) * sizeof(uint)); + + // Access the Stream Directory stream. + var directoryStream = CreateStreamFromIndicesReader(ref indicesReader, _directoryByteCount); + var directoryReader = directoryStream.CreateReader(); + + // Stream Directory format is as follows: + // - stream count: uint32 + // - stream sizes: uint32[stream count] + // - stream indices: uint32[stream count][] + + int streamCount = directoryReader.ReadInt32(); + + // Read sizes. + uint[] streamSizes = new uint[streamCount]; + for (int i = 0; i < streamCount; i++) + streamSizes[i] = directoryReader.ReadUInt32(); + + // Construct streams. + var result = new List(streamCount); + for (int i = 0; i < streamCount; i++) + { + // A size of 0xFFFFFFFF indicates the stream does not exist. + if (streamSizes[i] == uint.MaxValue) + continue; + + result.Add(CreateStreamFromIndicesReader(ref directoryReader, streamSizes[i])); + } + + return result; + } + + private MsfStream CreateStreamFromIndicesReader(ref BinaryStreamReader indicesReader, uint streamSize) + { + // Read all indices. + int[] indices = new int[GetBlockCount(streamSize)]; + for (int i = 0; i < indices.Length; i++) + indices[i] = indicesReader.ReadInt32(); + + // Transform indices to blocks. + var blocks = new IDataSource[indices.Length]; + for (int i = 0; i < blocks.Length; i++) + blocks[i] = GetBlock(indices[i]); + + // Construct stream. + var dataSource = new MsfStreamDataSource(streamSize, _originalBlockSize, blocks); + return new MsfStream(dataSource, indices); + } + + private uint GetBlockCount(uint streamSize) => (streamSize + _originalBlockSize - 1) / _originalBlockSize; +} diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/AsmResolver.Symbols.WindowsPdb.Tests.csproj b/test/AsmResolver.Symbols.WindowsPdb.Tests/AsmResolver.Symbols.WindowsPdb.Tests.csproj new file mode 100644 index 000000000..ff11f109f --- /dev/null +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/AsmResolver.Symbols.WindowsPdb.Tests.csproj @@ -0,0 +1,42 @@ + + + + net6.0 + enable + + false + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + + True + True + Resources.resx + + + + + + + + diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs new file mode 100644 index 000000000..95430985d --- /dev/null +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs @@ -0,0 +1,81 @@ +using System; +using System.Linq; +using AsmResolver.IO; +using AsmResolver.Symbols.WindowsPdb.Msf; +using Xunit; + +namespace AsmResolver.Symbols.WindowsPdb.Tests.Msf; + +public class MsfStreamDataSourceTest +{ + [Fact] + public void EmptyStream() + { + var source = new MsfStreamDataSource(0, 0x200, Array.Empty()); + + byte[] buffer = new byte[0x1000]; + int readCount = source.ReadBytes(0, buffer, 0, buffer.Length); + Assert.Equal(0, readCount); + Assert.All(buffer, b => Assert.Equal(b, 0)); + } + + [Theory] + [InlineData(0x200, 0x200)] + [InlineData(0x200, 0x100)] + public void StreamWithOneBlock(int blockSize, int actualSize) + { + byte[] block = new byte[blockSize]; + for (int i = 0; i < blockSize; i++) + block[i] = (byte) (i & 0xFF); + + var source = new MsfStreamDataSource((ulong) actualSize, (uint) blockSize, new[] { + block + }); + + byte[] buffer = new byte[0x1000]; + int readCount = source.ReadBytes(0, buffer, 0, buffer.Length); + Assert.Equal(actualSize, readCount); + Assert.Equal(block.Take(actualSize), buffer.Take(actualSize)); + } + + [Theory] + [InlineData(0x200, 0x400)] + [InlineData(0x200, 0x300)] + public void StreamWithTwoBlocks(int blockSize, int actualSize) + { + byte[] block1 = new byte[blockSize]; + for (int i = 0; i < blockSize; i++) + block1[i] = (byte) 'A'; + + byte[] block2 = new byte[blockSize]; + for (int i = 0; i < blockSize; i++) + block2[i] = (byte) 'B'; + + var source = new MsfStreamDataSource((ulong) actualSize, (uint) blockSize, new[] {block1, block2}); + + byte[] buffer = new byte[0x1000]; + int readCount = source.ReadBytes(0, buffer, 0, buffer.Length); + Assert.Equal(actualSize, readCount); + Assert.Equal(block1.Concat(block2).Take(actualSize), buffer.Take(actualSize)); + } + + [Theory] + [InlineData(0x200, 0x400)] + public void ReadInMiddleOfBlock(int blockSize, int actualSize) + { + byte[] block1 = new byte[blockSize]; + for (int i = 0; i < blockSize; i++) + block1[i] = (byte) ((i*2) & 0xFF); + + byte[] block2 = new byte[blockSize]; + for (int i = 0; i < blockSize; i++) + block2[i] = (byte) ((i * 2 + 1) & 0xFF); + + var source = new MsfStreamDataSource((ulong) actualSize, (uint) blockSize, new[] {block1, block2}); + + byte[] buffer = new byte[blockSize]; + int readCount = source.ReadBytes((ulong) blockSize / 4, buffer, 0, blockSize); + Assert.Equal(blockSize, readCount); + Assert.Equal(block1.Skip(blockSize / 4).Concat(block2).Take(blockSize), buffer); + } +} diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.Designer.cs b/test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.Designer.cs new file mode 100644 index 000000000..ccd260a2d --- /dev/null +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.Designer.cs @@ -0,0 +1,55 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace AsmResolver.Symbols.WindowsPdb.Tests.Properties { + using System; + + + [System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] + [System.Diagnostics.DebuggerNonUserCodeAttribute()] + [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static System.Resources.ResourceManager resourceMan; + + private static System.Globalization.CultureInfo resourceCulture; + + [System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Resources.ResourceManager ResourceManager { + get { + if (object.Equals(null, resourceMan)) { + System.Resources.ResourceManager temp = new System.Resources.ResourceManager("AsmResolver.Symbols.WindowsPdb.Tests.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + [System.ComponentModel.EditorBrowsableAttribute(System.ComponentModel.EditorBrowsableState.Advanced)] + internal static System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + internal static byte[] SimpleDllPdb { + get { + object obj = ResourceManager.GetObject("SimpleDllPdb", resourceCulture); + return ((byte[])(obj)); + } + } + } +} diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.resx b/test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.resx new file mode 100644 index 000000000..64f81d46b --- /dev/null +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Properties/Resources.resx @@ -0,0 +1,24 @@ + + + + + + + + + + text/microsoft-resx + + + 1.3 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + ..\Resources\SimpleDll.pdb;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/.gitignore b/test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/.gitignore new file mode 100644 index 000000000..bd46a47b5 --- /dev/null +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/.gitignore @@ -0,0 +1 @@ +!*.pdb diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/SimpleDll.pdb b/test/AsmResolver.Symbols.WindowsPdb.Tests/Resources/SimpleDll.pdb new file mode 100644 index 0000000000000000000000000000000000000000..2a5f3d4adbf687f01302a87ab125db03da2a52bf GIT binary patch literal 823296 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

&h-E<4_FNFUX!JeV6;PDPZOKoA^ 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

6d$;(GH9G1O zg&g>nF`q%HX?G4dz)24`&7Yxo4Qp$`+dC-4SmRi)UA$=rowjJPqxxY+!y-w-pi zZ=)-_7_KiP)97TaH;@hXC_A>pXBKCSK76h+uMYUwa_B%G{P`hdhd8CoW$vK8gdf1i zeRmL_T!S(9!dvWLBW$G~dl$p+uB@ll=j;>y;OFnDTP>xIL%i}~Wnx%(-w>a%=|k@5 zpkKAtQQG;HpU8f3#+q1wx-oiOqb#-RImAiWi6i5w-QYh?4#gKeB1U+NdeaqR1M-45 zjvK~+W!R&(JgWhl>e`&W;P=*r@MmYZb8weE`-DBq?rdy_Pap8{YJsi8)op=yZ(;ZL zo#Bjvwx4z693G$i6@GMuA93xwoH0K{cXy&M>_t1`)D6d+jQ6Tj2Vw1}i4*D&2R$9? zWQ0z0GI}ybyZ5O-o#M=S3%<8F=TMKy-^y}MmXCW6_<-x^@rc^gzm5@C>?NlsPH2vN z__&eNffd_A?Rx){0{i+KG3D39r^xH#_t5M8oUN?nJJIu*D=|bBY;Mhi)F)U+ z&;|U>C)6mqaz@44w~VLejV(AGjQSfB!i-8+OL`5cR^`g|)NqMVzSd^mjH!CUYm`ZD*tM zZ^SCtj-$2UnVnemAbBt{cd;6GCEg^*X$`-xQZp=ujYKBu6ARUDOr0tf8*q_(Srf<& z`Vgn2!Bcc#CH5(fysTOpcH#&*_!RDY)Fj?Pci+FxeUvunH9oT#arV6^&Z*IhbEo-< zEc9rGz0JqD6}IPOQ*0*tm~@+1dH`oX^N5eTaaRmmQIkBOKY47<*2Lg9@nPu9rr)Ur zl;La+pHl4+^`O$!#2M4A5jCm-=zV?e4S4f!VuJ&hIafihq<*mDMeJV$K8^htfuBo6 zPS&NekDqXEh8-G(k1HICem1}!yvd!1zVI3uZ^Kw6S!;#u^n=Zr6zOb?-Ac~%3bE@^ zbblA|%8Q)KA%mxox$(r;(b)QR__&Wsk^4B)#{+Z%{d*so*jNC&g?^4kR_0&h{A@RO zS)w?D%R$VA?j(1iuhzsVg^64IunRY+Bm7QYvky7CNetx7-Jtu_ZRqRuy5vgNi7$r2 z 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 literal 0 HcmV?d00001 From a2d11f728cf58806f93c80b066c50c3ee5ee451b Mon Sep 17 00:00:00 2001 From: Washi Date: Tue, 14 Jun 2022 17:35:33 +0200 Subject: [PATCH 3/6] Make MsfFile.Streams an owned collection. --- .../Msf/MsfFile.cs | 3 +- .../Msf/MsfStream.cs | 28 +++++++++++++++---- .../Msf/SerializedMsfFile.cs | 3 +- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs index 058ea7824..b2399185e 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading; +using AsmResolver.Collections; using AsmResolver.IO; namespace AsmResolver.Symbols.WindowsPdb.Msf; @@ -116,5 +117,5 @@ public MsfFile(uint blockSize) /// /// This method is called upon initialization of the property. /// - protected virtual IList GetStreams() => new List(); + protected virtual IList GetStreams() => new OwnedCollection(this); } diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs index cd8115dfa..2c9576116 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using AsmResolver.Collections; using AsmResolver.IO; namespace AsmResolver.Symbols.WindowsPdb.Msf; @@ -8,7 +9,7 @@ namespace AsmResolver.Symbols.WindowsPdb.Msf; ///

/// Represents a single stream in an Multi-Stream Format (MSF) file. /// -public class MsfStream +public class MsfStream : IOwnedCollectionElement { /// /// Creates a new MSF stream with the provided contents. @@ -26,18 +27,33 @@ public MsfStream(byte[] data) public MsfStream(IDataSource contents) { Contents = contents; - Blocks = Array.Empty(); + OriginalBlockIndices = Array.Empty(); } /// /// Initializes an MSF stream with a data source and a list of original block indices that the stream was based on. /// /// The data source containing the raw data of the stream. - /// The original block indices. - public MsfStream(IDataSource contents, IEnumerable blocks) + /// The original block indices that this MSF stream was based on. + public MsfStream(IDataSource contents, IEnumerable originalBlockIndices) { Contents = contents; - Blocks = blocks.ToArray(); + OriginalBlockIndices = originalBlockIndices.ToArray(); + } + + /// + /// Gets the parent MSF file that this stream is embedded in. + /// + public MsfFile Parent + { + get; + private set; + } + + MsfFile? IOwnedCollectionElement.Owner + { + get => Parent; + set => Parent = value; } /// @@ -52,7 +68,7 @@ public IDataSource Contents /// /// Gets a collection of block indices that this stream was based of (if available). /// - public IReadOnlyList Blocks + public IReadOnlyList OriginalBlockIndices { get; } diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs index 21d488bf9..a7c98e903 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Threading; +using AsmResolver.Collections; using AsmResolver.IO; namespace AsmResolver.Symbols.WindowsPdb.Msf; @@ -93,7 +94,7 @@ protected override IList GetStreams() streamSizes[i] = directoryReader.ReadUInt32(); // Construct streams. - var result = new List(streamCount); + var result = new OwnedCollection(this, streamCount); for (int i = 0; i < streamCount; i++) { // A size of 0xFFFFFFFF indicates the stream does not exist. From d708bf30f7190b4837cc2c8abd8335547d4b4190 Mon Sep 17 00:00:00 2001 From: Washi Date: Tue, 14 Jun 2022 20:25:26 +0200 Subject: [PATCH 4/6] Add simple MSF reconstruction support. --- .../Msf/Builder/FreeBlockMap.cs | 38 ++++ .../Msf/Builder/IMsfFileBuilder.cs | 14 ++ .../Msf/Builder/MsfFileBuffer.cs | 203 ++++++++++++++++++ .../Msf/Builder/SequentialMsfFileBuilder.cs | 56 +++++ .../Msf/MsfFile.cs | 48 +++-- .../Msf/MsfStream.cs | 28 ++- .../Msf/MsfSuperBlock.cs | 132 ++++++++++++ .../Msf/SerializedMsfFile.cs | 44 ++-- .../Msf/MsfFileTest.cs | 27 +++ .../Msf/MsfStreamDataSourceTest.cs | 2 +- 10 files changed, 542 insertions(+), 50 deletions(-) create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/FreeBlockMap.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs create mode 100644 src/AsmResolver.Symbols.WindowsPdb/Msf/MsfSuperBlock.cs create mode 100644 test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfFileTest.cs diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/FreeBlockMap.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/FreeBlockMap.cs new file mode 100644 index 000000000..4339d4daa --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/FreeBlockMap.cs @@ -0,0 +1,38 @@ +using System.Collections; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf.Builder; + +/// +/// Represents a block within a MSF file that contains information on which blocks in the MSF file are free to use. +/// +public class FreeBlockMap : SegmentBase +{ + /// + /// Creates a new empty free block map. + /// + /// The size of a single block in the MSF file. + public FreeBlockMap(uint blockSize) + { + BitField = new BitArray((int) blockSize * 8, true); + } + + /// + /// Gets the bit field indicating which blocks in the MSF file are free to use. + /// + public BitArray BitField + { + get; + } + + /// + public override uint GetPhysicalSize() => (uint) (BitField.Count / 8); + + /// + public override void Write(IBinaryStreamWriter writer) + { + byte[] data = new byte[BitField.Count / 8]; + BitField.CopyTo(data, 0); + writer.WriteBytes(data); + } +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs new file mode 100644 index 000000000..d47687e0a --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs @@ -0,0 +1,14 @@ +namespace AsmResolver.Symbols.WindowsPdb.Msf.Builder; + +/// +/// Provides members for constructing new MSF files. +/// +public interface IMsfFileBuilder +{ + /// + /// Reconstructs a new writable MSF file from an instance of . + /// + /// The file to reconstruct. + /// The reconstructed buffer. + MsfFileBuffer CreateFile(MsfFile file); +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs new file mode 100644 index 000000000..2a3d072af --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs @@ -0,0 +1,203 @@ +using System; +using System.Collections.Generic; +using System.IO; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf.Builder; + +/// +/// Represents a mutable buffer for building up a new MSF file. +/// +public class MsfFileBuffer : SegmentBase +{ + private readonly Dictionary _blockIndices = new(); + private readonly List _freeBlockMaps = new(); + private readonly List _blocks = new(); + + /// + /// Creates a new empty MSF file buffer. + /// + /// The block size to use. + public MsfFileBuffer(uint blockSize) + { + SuperBlock = new MsfSuperBlock + { + Signature = MsfSuperBlock.BigMsfSignature, + BlockSize = blockSize, + FreeBlockMapIndex = 1, + BlockCount = 3, + }; + + InsertBlock(0, SuperBlock); + var fpm = GetOrCreateFreeBlockMap(1, out _); + InsertBlock(2, null); + + fpm.BitField[0] = false; + fpm.BitField[1] = false; + fpm.BitField[2] = false; + } + + /// + /// Gets the super block of the MSF file that is being constructed. + /// + public MsfSuperBlock SuperBlock + { + get; + } + + /// + /// Determines whether a block in the MSF file buffer is available or not. + /// + /// The index of the block. + /// true if the block is available, false otherwise. + public bool BlockIsAvailable(int blockIndex) + { + var freeBlockMap = GetOrCreateFreeBlockMap(blockIndex, out int offset); + if (offset < 3 && (blockIndex == 0 || offset > 0)) + return false; + return freeBlockMap.BitField[offset]; + } + + /// + /// Inserts a block of the provided MSF stream into the buffer. + /// + /// The MSF file index to insert the block into. + /// The stream to pull a chunk from. + /// The index of the chunk to store at the provided block index. + /// + /// Occurs when the index provided by is already in use. + /// + public void InsertBlock(int blockIndex, MsfStream stream, int chunkIndex) + { + var fpm = GetOrCreateFreeBlockMap(blockIndex, out int offset); + if (!fpm.BitField[offset]) + throw new ArgumentException($"Block {blockIndex} is already in use."); + + uint blockSize = SuperBlock.BlockSize; + var segment = new DataSourceSegment( + stream.Contents, + stream.Contents.BaseAddress + (ulong) (chunkIndex * blockSize), + (uint) (chunkIndex * blockSize), + (uint) Math.Min(stream.Contents.Length - (ulong) (chunkIndex * blockSize), blockSize)); + + InsertBlock(blockIndex, segment); + + int[] indices = GetMutableBlockIndicesForStream(stream); + indices[chunkIndex] = blockIndex; + + fpm.BitField[offset] = false; + } + + private void InsertBlock(int blockIndex, ISegment? segment) + { + while (_blocks.Count <= blockIndex) + _blocks.Add(null); + + _blocks[blockIndex] = segment; + SuperBlock.BlockCount = (uint) _blocks.Count; + } + + private FreeBlockMap GetOrCreateFreeBlockMap(int blockIndex, out int offset) + { + int index = Math.DivRem(blockIndex, (int) SuperBlock.BlockSize, out offset); + while (_freeBlockMaps.Count <= index) + { + var freeBlockMap = new FreeBlockMap(SuperBlock.BlockSize); + _freeBlockMaps.Add(freeBlockMap); + InsertBlock(index + (int) SuperBlock.FreeBlockMapIndex, freeBlockMap); + } + + return _freeBlockMaps[index]; + } + + private int[] GetMutableBlockIndicesForStream(MsfStream stream) + { + if (!_blockIndices.TryGetValue(stream, out int[]? indices)) + { + indices = new int[stream.GetRequiredBlockCount(SuperBlock.BlockSize)]; + _blockIndices.Add(stream, indices); + } + + return indices; + } + + /// + /// Gets the allocated indices for the provided MSF stream. + /// + /// The stream. + /// The block indices. + public int[] GetBlockIndicesForStream(MsfStream stream) => (int[]) GetMutableBlockIndicesForStream(stream).Clone(); + + /// + /// Constructs a new MSF stream containing the stream directory. + /// + /// The files that the directory should list. + /// The constructed stream. + /// + /// This method does not add the stream to the buffer, nor does it update the super block. + /// + public MsfStream CreateStreamDirectory(IList streams) + { + using var contents = new MemoryStream(); + var writer = new BinaryStreamWriter(contents); + + // Stream count. + writer.WriteInt32(streams.Count); + + // Stream sizes. + for (int i = 0; i < streams.Count; i++) + writer.WriteUInt32((uint) streams[i].Contents.Length); + + // Stream indices. + for (int i = 0; i < streams.Count; i++) + { + int[] indices = GetMutableBlockIndicesForStream(streams[i]); + foreach (int index in indices) + writer.WriteInt32(index); + } + + byte[] bytes = contents.ToArray(); + return new MsfStream(bytes); + } + + /// + /// Creates a new MSF stream containing the block indices of the stream directory. + /// + /// The stream directory to store the indices for. + /// The constructed stream. + /// + /// This method does not add the stream to the buffer, nor does it update the super block. + /// + public MsfStream CreateStreamDirectoryMap(MsfStream streamDirectory) + { + using var contents = new MemoryStream(); + var writer = new BinaryStreamWriter(contents); + + int[] indices = GetMutableBlockIndicesForStream(streamDirectory); + foreach (int index in indices) + writer.WriteInt32(index); + + byte[] bytes = contents.ToArray(); + return new MsfStream(bytes); + } + + /// + public override uint GetPhysicalSize() => SuperBlock.BlockCount * SuperBlock.BlockSize; + + /// + public override void Write(IBinaryStreamWriter writer) + { + foreach (var block in _blocks) + { + if (block is null) + { + writer.WriteZeroes((int) SuperBlock.BlockSize); + } + else + { + block.Write(writer); + writer.Align(SuperBlock.BlockSize); + } + } + } +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs new file mode 100644 index 000000000..d34a9d0f1 --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs @@ -0,0 +1,56 @@ +namespace AsmResolver.Symbols.WindowsPdb.Msf.Builder; + +/// +/// Provides an implementation of the that places all blocks of every stream in sequence, +/// and effectively defragments the file system. +/// +public class SequentialMsfFileBuilder : IMsfFileBuilder +{ + /// + /// Gets the default instance of the class. + /// + public static SequentialMsfFileBuilder Instance + { + get; + } = new(); + + /// + public MsfFileBuffer CreateFile(MsfFile file) + { + var result = new MsfFileBuffer(file.BlockSize); + + // Block 0, 1, and 2 are reserved for the super block, FPM1 and FPM2. + int currentIndex = 3; + + // Add streams in sequence. + for (int i = 0; i < file.Streams.Count; i++) + AddStream(result, file.Streams[i], ref currentIndex); + + // Construct and add stream directory. + var directory = result.CreateStreamDirectory(file.Streams); + result.SuperBlock.DirectoryByteCount = (uint) directory.Contents.Length; + AddStream(result, directory, ref currentIndex); + + // Construct and add stream directory map. + var directoryMap = result.CreateStreamDirectoryMap(directory); + result.SuperBlock.DirectoryMapIndex = (uint) currentIndex; + AddStream(result, directoryMap, ref currentIndex); + + return result; + } + + private static void AddStream(MsfFileBuffer buffer, MsfStream stream, ref int currentIndex) + { + int blockCount = stream.GetRequiredBlockCount(buffer.SuperBlock.BlockSize); + + for (int j = 0; j < blockCount; j++) + { + buffer.InsertBlock(currentIndex, stream, j); + + // Move to next available block, and skip over the FPMs. + currentIndex++; + if (currentIndex % 4096 == 1) + currentIndex += 2; + } + } +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs index b2399185e..5e73e5d84 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfFile.cs @@ -1,8 +1,10 @@ using System; using System.Collections.Generic; +using System.IO; using System.Threading; using AsmResolver.Collections; using AsmResolver.IO; +using AsmResolver.Symbols.WindowsPdb.Msf.Builder; namespace AsmResolver.Symbols.WindowsPdb.Msf; @@ -11,21 +13,6 @@ namespace AsmResolver.Symbols.WindowsPdb.Msf; /// public class MsfFile { - // Used in MSF v2.0 - internal static readonly byte[] SmallMsfSignature = - { - 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, 0x70, 0x72, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x32, 0x2e, 0x30, - 0x30, 0x0d, 0x0a, 0x1a, 0x4a, 0x47 - }; - - // Used in MSF v7.0 - internal static readonly byte[] BigMsfSignature = - { - 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, - 0x4d, 0x53, 0x46, 0x20, 0x37, 0x2e, 0x30, 0x30, 0x0d, 0x0a, 0x1a, 0x44, 0x53, 0x00, 0x00, 0x00 - }; - private uint _blockSize; private IList? _streams; @@ -40,7 +27,7 @@ public uint BlockSize get => _blockSize; set { - if (_blockSize is 512 or 1024 or 2048 or 4096) + if (value is not (512 or 1024 or 2048 or 4096)) { throw new ArgumentOutOfRangeException( nameof(value), @@ -118,4 +105,33 @@ public MsfFile(uint blockSize) /// This method is called upon initialization of the property. /// protected virtual IList GetStreams() => new OwnedCollection(this); + + /// + /// Reconstructs and writes the MSF file to the disk. + /// + /// The path of the file to write to. + public void Write(string path) + { + using var fs = File.Create(path); + Write(fs); + } + + /// + /// Reconstructs and writes the MSF file to an output stream. + /// + /// The output stream. + public void Write(Stream stream) => Write(new BinaryStreamWriter(stream)); + + /// + /// Reconstructs and writes the MSF file to an output stream. + /// + /// The output stream. + public void Write(IBinaryStreamWriter writer) => Write(writer, SequentialMsfFileBuilder.Instance); + + /// + /// Reconstructs and writes the MSF file to an output stream. + /// + /// The output stream. + /// The builder to use for reconstructing the MSF file. + public void Write(IBinaryStreamWriter writer, IMsfFileBuilder builder) => builder.CreateFile(this).Write(writer); } diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs index 2c9576116..942bf0fab 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfStream.cs @@ -44,7 +44,7 @@ public MsfStream(IDataSource contents, IEnumerable originalBlockIndices) /// /// Gets the parent MSF file that this stream is embedded in. /// - public MsfFile Parent + public MsfFile? Parent { get; private set; @@ -73,6 +73,32 @@ public IReadOnlyList OriginalBlockIndices get; } + /// + /// Gets the amount of blocks that is required to store this MSF stream. + /// + /// The number of blocks. + /// Occurs when the stream is not added to a file. + public int GetRequiredBlockCount() + { + if (Parent is null) + { + throw new InvalidOperationException( + "Determining the required block count of a stream requires the stream to be added to an MSF file."); + } + + return GetRequiredBlockCount(Parent.BlockSize); + } + + /// + /// Gets the amount of blocks that is required to store this MSF stream, given the provided block size. + /// + /// The block size. + /// The number of blocks. + public int GetRequiredBlockCount(uint blockSize) + { + return (int) ((Contents.Length + blockSize - 1) / blockSize); + } + /// /// Creates a new binary reader that reads the raw contents of the stream. /// diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfSuperBlock.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfSuperBlock.cs new file mode 100644 index 000000000..91dfe778d --- /dev/null +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/MsfSuperBlock.cs @@ -0,0 +1,132 @@ +using System; +using AsmResolver.IO; + +namespace AsmResolver.Symbols.WindowsPdb.Msf; + +/// +/// Represents the first block in a Multi-Stream Format (MSF) file. +/// +public sealed class MsfSuperBlock : SegmentBase +{ + // Used in MSF v2.0 + internal static readonly byte[] SmallMsfSignature = + { + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, 0x70, 0x72, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x20, 0x64, 0x61, 0x74, 0x61, 0x62, 0x61, 0x73, 0x65, 0x20, 0x32, 0x2e, 0x30, + 0x30, 0x0d, 0x0a, 0x1a, 0x4a, 0x47 + }; + + // Used in MSF v7.0 + internal static readonly byte[] BigMsfSignature = + { + 0x4d, 0x69, 0x63, 0x72, 0x6f, 0x73, 0x6f, 0x66, 0x74, 0x20, 0x43, 0x2f, 0x43, 0x2b, 0x2b, 0x20, + 0x4d, 0x53, 0x46, 0x20, 0x37, 0x2e, 0x30, 0x30, 0x0d, 0x0a, 0x1a, 0x44, 0x53, 0x00, 0x00, 0x00 + }; + + /// + /// Gets or sets the magic file signature in the super block, identifying the format version of the MSF file. + /// + public byte[] Signature + { + get; + set; + } = (byte[]) BigMsfSignature.Clone(); + + /// + /// Gets or sets the size of an individual block in bytes. + /// + public uint BlockSize + { + get; + set; + } + + /// + /// Gets or sets the index of the block containing a bitfield indicating which blocks in the entire MSF file are + /// in use or not. + /// + public uint FreeBlockMapIndex + { + get; + set; + } + + /// + /// Gets or sets the total number of blocks in the MSF file. + /// + public uint BlockCount + { + get; + set; + } + + /// + /// Gets or sets the number of bytes of the stream directory in the MSF file. + /// + public uint DirectoryByteCount + { + get; + set; + } + + /// + /// Gets or sets the index of the block containing all block indices that make up the stream directory of the MSF + /// file. + /// + public uint DirectoryMapIndex + { + get; + set; + } + + /// + /// Reads a single MSF super block from the provided input stream. + /// + /// The input stream. + /// The parsed MSF super block. + /// Occurs when the super block is malformed. + public static MsfSuperBlock FromReader(ref BinaryStreamReader reader) + { + var result = new MsfSuperBlock(); + + // Check MSF header. + result.Signature = new byte[BigMsfSignature.Length]; + int count = reader.ReadBytes(result.Signature, 0, result.Signature.Length); + if (count != BigMsfSignature.Length || !ByteArrayEqualityComparer.Instance.Equals(result.Signature, BigMsfSignature)) + throw new BadImageFormatException("File does not start with a valid or supported MSF file signature."); + + result.BlockSize = reader.ReadUInt32(); + if (result.BlockSize is not (512 or 1024 or 2048 or 4096)) + throw new BadImageFormatException("Block size must be either 512, 1024, 2048 or 4096 bytes."); + + // We don't really use the free block map as we are not fully implementing the NTFS-esque file system, but we + // validate its contents regardless as a sanity check. + result.FreeBlockMapIndex = reader.ReadUInt32(); + if (result.FreeBlockMapIndex is not (1 or 2)) + throw new BadImageFormatException($"Free block map index must be 1 or 2, but was {result.FreeBlockMapIndex}."); + + result.BlockCount = reader.ReadUInt32(); + + result.DirectoryByteCount = reader.ReadUInt32(); + reader.Offset += sizeof(uint); + result.DirectoryMapIndex = reader.ReadUInt32(); + + return result; + } + + /// + public override uint GetPhysicalSize() => (uint) BigMsfSignature.Length + sizeof(uint) * 6; + + /// + public override void Write(IBinaryStreamWriter writer) + { + writer.WriteBytes(Signature); + writer.WriteUInt32(BlockSize); + writer.WriteUInt32(FreeBlockMapIndex); + writer.WriteUInt32(BlockCount); + writer.WriteUInt32(DirectoryByteCount); + writer.WriteUInt32(0); + writer.WriteUInt32(DirectoryMapIndex); + } + +} diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs index a7c98e903..12e14f6ea 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs @@ -7,7 +7,7 @@ namespace AsmResolver.Symbols.WindowsPdb.Msf; /// -/// Provides an implementation for an MSF file version, read from an input file. +/// Provides an implementation for an MSF file that is read from an input file. /// /// /// Currently, this model only supports version 7.0 of the file format. @@ -15,11 +15,9 @@ namespace AsmResolver.Symbols.WindowsPdb.Msf; public class SerializedMsfFile : MsfFile { private readonly BinaryStreamReader _reader; - private readonly uint _originalBlockSize; + private readonly MsfSuperBlock _originalSuperBlock; private readonly IDataSource?[] _blocks; - private readonly uint _directoryByteCount; - private readonly int _blockMapIndex; /// /// Interprets an input stream as an MSF file version 7.0. @@ -28,28 +26,10 @@ public class SerializedMsfFile : MsfFile /// Occurs when the MSF file is malformed. public SerializedMsfFile(BinaryStreamReader reader) { - // Check MSF header. - byte[] signature = new byte[BigMsfSignature.Length]; - int count = reader.ReadBytes(signature, 0, signature.Length); - if (count != BigMsfSignature.Length || !ByteArrayEqualityComparer.Instance.Equals(signature, BigMsfSignature)) - throw new BadImageFormatException("File does not start with a valid or supported MSF file signature."); - - // BlockSize property also validates, so no need to do it again. - BlockSize = _originalBlockSize = reader.ReadUInt32(); - - // We don't really use the free block map as we are not fully implementing the NTFS-esque file system, but we - // validate its contents regardless as a sanity check. - int freeBlockMapIndex = reader.ReadInt32(); - if (freeBlockMapIndex is not (1 or 2)) - throw new BadImageFormatException($"Free block map index must be 1 or 2, but was {freeBlockMapIndex}."); - - int blockCount = reader.ReadInt32(); - _blocks = new IDataSource?[blockCount]; - - _directoryByteCount = reader.ReadUInt32(); - reader.Offset += sizeof(uint); - _blockMapIndex = reader.ReadInt32(); + _originalSuperBlock = MsfSuperBlock.FromReader(ref reader); + BlockSize = _originalSuperBlock.BlockSize; + _blocks = new IDataSource?[_originalSuperBlock.BlockCount]; _reader = reader; } @@ -60,8 +40,8 @@ private IDataSource GetBlock(int index) // We lazily initialize all blocks by slicing the original data source of the reader. var block = new DataSourceSlice( _reader.DataSource, - _reader.DataSource.BaseAddress + (ulong) (index * _originalBlockSize), - _originalBlockSize); + _reader.DataSource.BaseAddress + (ulong) (index * _originalSuperBlock.BlockSize), + _originalSuperBlock.BlockSize); Interlocked.CompareExchange(ref _blocks[index], block, null); } @@ -73,12 +53,12 @@ private IDataSource GetBlock(int index) protected override IList GetStreams() { // Get the block indices of the Stream Directory stream. - var indicesBlock = GetBlock(_blockMapIndex); + var indicesBlock = GetBlock((int) _originalSuperBlock.DirectoryMapIndex); var indicesReader = new BinaryStreamReader(indicesBlock, indicesBlock.BaseAddress, 0, - GetBlockCount(_directoryByteCount) * sizeof(uint)); + GetBlockCount(_originalSuperBlock.DirectoryByteCount) * sizeof(uint)); // Access the Stream Directory stream. - var directoryStream = CreateStreamFromIndicesReader(ref indicesReader, _directoryByteCount); + var directoryStream = CreateStreamFromIndicesReader(ref indicesReader, _originalSuperBlock.DirectoryByteCount); var directoryReader = directoryStream.CreateReader(); // Stream Directory format is as follows: @@ -120,9 +100,9 @@ private MsfStream CreateStreamFromIndicesReader(ref BinaryStreamReader indicesRe blocks[i] = GetBlock(indices[i]); // Construct stream. - var dataSource = new MsfStreamDataSource(streamSize, _originalBlockSize, blocks); + var dataSource = new MsfStreamDataSource(streamSize, _originalSuperBlock.BlockSize, blocks); return new MsfStream(dataSource, indices); } - private uint GetBlockCount(uint streamSize) => (streamSize + _originalBlockSize - 1) / _originalBlockSize; + private uint GetBlockCount(uint streamSize) => (streamSize + _originalSuperBlock.BlockSize - 1) / _originalSuperBlock.BlockSize; } diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfFileTest.cs b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfFileTest.cs new file mode 100644 index 000000000..80298ad77 --- /dev/null +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfFileTest.cs @@ -0,0 +1,27 @@ +using System.IO; +using System.Linq; +using AsmResolver.Symbols.WindowsPdb.Msf; +using Xunit; + +namespace AsmResolver.Symbols.WindowsPdb.Tests.Msf; + +public class MsfFileTest +{ + [Fact] + public void RoundTrip() + { + var file = MsfFile.FromBytes(Properties.Resources.SimpleDllPdb); + + using var stream = new MemoryStream(); + file.Write(stream); + + var newFile = MsfFile.FromBytes(stream.ToArray()); + + Assert.Equal(file.BlockSize, newFile.BlockSize); + Assert.Equal(file.Streams.Count, newFile.Streams.Count); + Assert.All(Enumerable.Range(0, file.Streams.Count), i => + { + Assert.Equal(file.Streams[i].CreateReader().ReadToEnd(), newFile.Streams[i].CreateReader().ReadToEnd());; + }); + } +} diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs index 95430985d..86bd38693 100644 --- a/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs @@ -16,7 +16,7 @@ public void EmptyStream() byte[] buffer = new byte[0x1000]; int readCount = source.ReadBytes(0, buffer, 0, buffer.Length); Assert.Equal(0, readCount); - Assert.All(buffer, b => Assert.Equal(b, 0)); + Assert.All(buffer, b => Assert.Equal(0, b)); } [Theory] From 1098369fe4e0862d2bcb91f0cb6d3f66e789e6b4 Mon Sep 17 00:00:00 2001 From: Washi Date: Wed, 15 Jun 2022 15:50:15 +0200 Subject: [PATCH 5/6] Enable nupkg generation for WindowsPdb project. --- .../AsmResolver.Symbols.WindowsPdb.csproj | 1 + 1 file changed, 1 insertion(+) diff --git a/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj b/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj index 1f1099b04..b0b3df765 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj +++ b/src/AsmResolver.Symbols.WindowsPdb/AsmResolver.Symbols.WindowsPdb.csproj @@ -7,6 +7,7 @@ enable net6.0;netcoreapp3.1;netstandard2.0 true + true From 6c0eeb3322bec8e4e37f66a33b1bac389988e99a Mon Sep 17 00:00:00 2001 From: Washi Date: Wed, 15 Jun 2022 15:50:59 +0200 Subject: [PATCH 6/6] Inline some variables, clarify some docs and remove some redundant code. --- .../Msf/Builder/IMsfFileBuilder.cs | 2 +- .../Msf/Builder/MsfFileBuffer.cs | 14 ++++++++------ .../Msf/Builder/SequentialMsfFileBuilder.cs | 18 ++++++++++++------ .../Msf/SerializedMsfFile.cs | 6 ++++-- .../Msf/MsfStreamDataSourceTest.cs | 4 +--- 5 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs index d47687e0a..f340944a1 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/IMsfFileBuilder.cs @@ -6,7 +6,7 @@ namespace AsmResolver.Symbols.WindowsPdb.Msf.Builder; public interface IMsfFileBuilder { /// - /// Reconstructs a new writable MSF file from an instance of . + /// Reconstructs a new writable MSF file buffer from an instance of . /// /// The file to reconstruct. /// The reconstructed buffer. diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs index 2a3d072af..79ff2afc1 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/MsfFileBuffer.cs @@ -11,8 +11,8 @@ namespace AsmResolver.Symbols.WindowsPdb.Msf.Builder; public class MsfFileBuffer : SegmentBase { private readonly Dictionary _blockIndices = new(); - private readonly List _freeBlockMaps = new(); - private readonly List _blocks = new(); + private readonly List _freeBlockMaps = new(2); + private readonly List _blocks; /// /// Creates a new empty MSF file buffer. @@ -28,6 +28,8 @@ public MsfFileBuffer(uint blockSize) BlockCount = 3, }; + _blocks = new List((int) blockSize); + InsertBlock(0, SuperBlock); var fpm = GetOrCreateFreeBlockMap(1, out _); InsertBlock(2, null); @@ -90,9 +92,11 @@ public void InsertBlock(int blockIndex, MsfStream stream, int chunkIndex) private void InsertBlock(int blockIndex, ISegment? segment) { + // Ensure enough blocks are present in the backing-buffer. while (_blocks.Count <= blockIndex) _blocks.Add(null); + // Insert block and update super block. _blocks[blockIndex] = segment; SuperBlock.BlockCount = (uint) _blocks.Count; } @@ -156,8 +160,7 @@ public MsfStream CreateStreamDirectory(IList streams) writer.WriteInt32(index); } - byte[] bytes = contents.ToArray(); - return new MsfStream(bytes); + return new MsfStream(contents.ToArray()); } /// @@ -177,8 +180,7 @@ public MsfStream CreateStreamDirectoryMap(MsfStream streamDirectory) foreach (int index in indices) writer.WriteInt32(index); - byte[] bytes = contents.ToArray(); - return new MsfStream(bytes); + return new MsfStream(contents.ToArray()); } /// diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs index d34a9d0f1..35195f776 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/Builder/SequentialMsfFileBuilder.cs @@ -43,14 +43,20 @@ private static void AddStream(MsfFileBuffer buffer, MsfStream stream, ref int cu { int blockCount = stream.GetRequiredBlockCount(buffer.SuperBlock.BlockSize); - for (int j = 0; j < blockCount; j++) + for (int j = 0; j < blockCount; j++, currentIndex++) { - buffer.InsertBlock(currentIndex, stream, j); + // Skip over any of the FPM indices. + switch (currentIndex % 4096) + { + case 1: + currentIndex += 2; + break; + case 2: + currentIndex++; + break; + } - // Move to next available block, and skip over the FPMs. - currentIndex++; - if (currentIndex % 4096 == 1) - currentIndex += 2; + buffer.InsertBlock(currentIndex, stream, j); } } } diff --git a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs index 12e14f6ea..025780e57 100644 --- a/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs +++ b/src/AsmResolver.Symbols.WindowsPdb/Msf/SerializedMsfFile.cs @@ -16,7 +16,6 @@ public class SerializedMsfFile : MsfFile { private readonly BinaryStreamReader _reader; private readonly MsfSuperBlock _originalSuperBlock; - private readonly IDataSource?[] _blocks; /// @@ -104,5 +103,8 @@ private MsfStream CreateStreamFromIndicesReader(ref BinaryStreamReader indicesRe return new MsfStream(dataSource, indices); } - private uint GetBlockCount(uint streamSize) => (streamSize + _originalSuperBlock.BlockSize - 1) / _originalSuperBlock.BlockSize; + private uint GetBlockCount(uint streamSize) + { + return (streamSize + _originalSuperBlock.BlockSize - 1) / _originalSuperBlock.BlockSize; + } } diff --git a/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs index 86bd38693..d8ce31566 100644 --- a/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs +++ b/test/AsmResolver.Symbols.WindowsPdb.Tests/Msf/MsfStreamDataSourceTest.cs @@ -28,9 +28,7 @@ public void StreamWithOneBlock(int blockSize, int actualSize) for (int i = 0; i < blockSize; i++) block[i] = (byte) (i & 0xFF); - var source = new MsfStreamDataSource((ulong) actualSize, (uint) blockSize, new[] { - block - }); + var source = new MsfStreamDataSource((ulong) actualSize, (uint) blockSize, new[] {block}); byte[] buffer = new byte[0x1000]; int readCount = source.ReadBytes(0, buffer, 0, buffer.Length);