Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/cecil.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVitek Karas <10670590+vitek-karas@users.noreply.github.com>2022-07-19 17:11:42 +0300
committerGitHub <noreply@github.com>2022-07-19 17:11:42 +0300
commit2cd569a98964629b8fa88284a8b5af8077d5f9de (patch)
treee3545d6a4fa843dec26d48df98da8797967341aa
parentc74bbee9aee461ad924fe8dd68d1118348379859 (diff)
Fix corrupted debug header directory entry when writing multiple such entries (#35)
-rw-r--r--Mono.Cecil.PE/ImageWriter.cs2
-rw-r--r--Test/Mono.Cecil.Tests/PortablePdbTests.cs12
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 ());