static Stream GetPortablePdbStream(ImageDebugHeaderEntry entry) { var compressed_stream = new MemoryStream(entry.Data); var reader = new BinaryStreamReader(compressed_stream); reader.ReadInt32(); // signature var length = reader.ReadInt32(); var decompressed_stream = new MemoryStream(length); using (var deflate_stream = new DeflateStream(compressed_stream, CompressionMode.Decompress, leaveOpen: true)) deflate_stream.CopyTo(decompressed_stream); return(decompressed_stream); }
private static Stream GetPortablePdbStream(ImageDebugHeaderEntry entry) { MemoryStream stream = new MemoryStream(entry.Data); BinaryStreamReader binaryStreamReader = new BinaryStreamReader(stream); binaryStreamReader.ReadInt32(); MemoryStream memoryStream = new MemoryStream(binaryStreamReader.ReadInt32()); using (DeflateStream deflateStream = new DeflateStream(stream, CompressionMode.Decompress, true)) { deflateStream.CopyTo(memoryStream); return(memoryStream); } }
public ImageDebugHeader GetDebugHeader() { ImageDebugHeader pdbDebugHeader = writer.GetDebugHeader(); var directory = new ImageDebugDirectory { Type = ImageDebugType.EmbeddedPortablePdb, MajorVersion = 0x0100, MinorVersion = 0x0100, }; var data = new MemoryStream(); var w = new BinaryStreamWriter(data); w.WriteByte(0x4d); w.WriteByte(0x50); w.WriteByte(0x44); w.WriteByte(0x42); w.WriteInt32((int)stream.Length); stream.Position = 0; using (var compress_stream = new DeflateStream(data, CompressionMode.Compress, leaveOpen: true)) stream.CopyTo(compress_stream); directory.SizeOfData = (int)data.Length; var debugHeaderEntries = new ImageDebugHeaderEntry [pdbDebugHeader.Entries.Length + 1]; for (int i = 0; i < pdbDebugHeader.Entries.Length; i++) { debugHeaderEntries [i] = pdbDebugHeader.Entries [i]; } debugHeaderEntries [debugHeaderEntries.Length - 1] = new ImageDebugHeaderEntry(directory, data.ToArray()); return(new ImageDebugHeader(debugHeaderEntries)); }
public ImageDebugHeader(ImageDebugHeaderEntry entry) : this(new [] { entry }) { }
public ImageDebugHeader GetDebugHeader() { if (IsEmbedded) { return(new ImageDebugHeader()); } ImageDebugHeaderEntry codeViewEntry; { var codeViewDirectory = new ImageDebugDirectory() { MajorVersion = 256, MinorVersion = 20557, Type = ImageDebugType.CodeView, TimeDateStamp = (int)pdb_id_stamp, }; var buffer = new ByteBuffer(); // RSDS buffer.WriteUInt32(0x53445352); // Module ID buffer.WriteBytes(pdb_id_guid.ToByteArray()); // PDB Age buffer.WriteUInt32(1); // PDB Path var fileName = writer.BaseStream.GetFileName(); if (string.IsNullOrEmpty(fileName)) { fileName = module.Assembly.Name.Name + ".pdb"; } buffer.WriteBytes(System.Text.Encoding.UTF8.GetBytes(fileName)); buffer.WriteByte(0); var data = new byte [buffer.length]; Buffer.BlockCopy(buffer.buffer, 0, data, 0, buffer.length); codeViewDirectory.SizeOfData = data.Length; codeViewEntry = new ImageDebugHeaderEntry(codeViewDirectory, data); } ImageDebugHeaderEntry pdbChecksumEntry; { var pdbChecksumDirectory = new ImageDebugDirectory() { MajorVersion = 1, MinorVersion = 0, Type = ImageDebugType.PdbChecksum, TimeDateStamp = 0 }; var buffer = new ByteBuffer(); // SHA256 - Algorithm name buffer.WriteBytes(System.Text.Encoding.UTF8.GetBytes("SHA256")); buffer.WriteByte(0); // Checksum - 32 bytes buffer.WriteBytes(pdb_checksum); var data = new byte [buffer.length]; Buffer.BlockCopy(buffer.buffer, 0, data, 0, buffer.length); pdbChecksumDirectory.SizeOfData = data.Length; pdbChecksumEntry = new ImageDebugHeaderEntry(pdbChecksumDirectory, data); } return(new ImageDebugHeader(new ImageDebugHeaderEntry [] { codeViewEntry, pdbChecksumEntry })); }