diff options
author | Vitek Karas <10670590+vitek-karas@users.noreply.github.com> | 2022-07-19 17:11:42 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-19 17:11:42 +0300 |
commit | 2cd569a98964629b8fa88284a8b5af8077d5f9de (patch) | |
tree | e3545d6a4fa843dec26d48df98da8797967341aa | |
parent | c74bbee9aee461ad924fe8dd68d1118348379859 (diff) |
Fix corrupted debug header directory entry when writing multiple such entries (#35)
-rw-r--r-- | Mono.Cecil.PE/ImageWriter.cs | 2 | ||||
-rw-r--r-- | Test/Mono.Cecil.Tests/PortablePdbTests.cs | 12 |
2 files changed, 8 insertions, 6 deletions
diff --git a/Mono.Cecil.PE/ImageWriter.cs b/Mono.Cecil.PE/ImageWriter.cs index c2eb97a..3d8d889 100644 --- a/Mono.Cecil.PE/ImageWriter.cs +++ b/Mono.Cecil.PE/ImageWriter.cs @@ -719,7 +719,7 @@ namespace Mono.Cecil.PE { entry.Directory = directory; data_len += entry.Data.Length; - data_address += data_len; + data_address += entry.Data.Length; } debug_dir_len = directories_len + data_len; diff --git a/Test/Mono.Cecil.Tests/PortablePdbTests.cs b/Test/Mono.Cecil.Tests/PortablePdbTests.cs index bd524fd..3aa0ffc 100644 --- a/Test/Mono.Cecil.Tests/PortablePdbTests.cs +++ b/Test/Mono.Cecil.Tests/PortablePdbTests.cs @@ -911,7 +911,7 @@ class Program Assert.AreEqual ("SHA256", algorithmName); GetCodeViewPdbId (module, out byte [] pdbId); - GetEmbeddedPdb (debugHeader, out byte [] embeddedPdb); + GetEmbeddedPdb (module.Image, debugHeader, out byte [] embeddedPdb); CalculatePdbChecksumAndId (embeddedPdb, out byte [] expectedChecksum, out byte [] expectedPdbId); CollectionAssert.AreEqual (expectedChecksum, checksum); @@ -1005,7 +1005,7 @@ class Program Assert.AreEqual ("SHA256", algorithmName); GetCodeViewPdbId (module, out byte [] pdbId); - GetEmbeddedPdb (debugHeader, out byte [] embeddedPdb); + GetEmbeddedPdb (module.Image, debugHeader, out byte [] embeddedPdb); CalculatePdbChecksumAndId (embeddedPdb, out byte [] expectedChecksum, out byte [] expectedPdbId); CollectionAssert.AreEqual (expectedChecksum, checksum); @@ -1026,7 +1026,7 @@ class Program byte [] pdbIdOne; using (var module = ModuleDefinition.ReadModule (destination, new ReaderParameters { ReadSymbols = true })) { var debugHeader = module.GetDebugHeader (); - GetEmbeddedPdb (debugHeader, out byte [] embeddedPdb); + GetEmbeddedPdb (module.Image, debugHeader, out byte [] embeddedPdb); CalculatePdbChecksumAndId (embeddedPdb, out byte [] expectedChecksum, out pdbIdOne); } @@ -1037,18 +1037,20 @@ class Program byte [] pdbIdTwo; using (var module = ModuleDefinition.ReadModule (destination, new ReaderParameters { ReadSymbols = true })) { var debugHeader = module.GetDebugHeader (); - GetEmbeddedPdb (debugHeader, out byte [] embeddedPdb); + GetEmbeddedPdb (module.Image, debugHeader, out byte [] embeddedPdb); CalculatePdbChecksumAndId (embeddedPdb, out byte [] expectedChecksum, out pdbIdTwo); } CollectionAssert.AreEqual (pdbIdOne, pdbIdTwo); } - private void GetEmbeddedPdb (ImageDebugHeader debugHeader, out byte [] embeddedPdb) + private void GetEmbeddedPdb (Image image, ImageDebugHeader debugHeader, out byte [] embeddedPdb) { var entry = Mixin.GetEmbeddedPortablePdbEntry (debugHeader); Assert.IsNotNull (entry); + Assert.AreEqual (entry.Directory.PointerToRawData, image.ResolveVirtualAddress ((uint)entry.Directory.AddressOfRawData)); + var compressed_stream = new MemoryStream (entry.Data); var reader = new BinaryStreamReader (compressed_stream); Assert.AreEqual (0x4244504D, reader.ReadInt32 ()); |