public bool ProcessDebugHeader(ImageDebugHeader header) { if (image == module.Image) { return(true); } ImageDebugHeaderEntry codeViewEntry = header.GetCodeViewEntry(); if (codeViewEntry == null) { return(false); } byte[] data = codeViewEntry.Data; if (data.Length < 24) { return(false); } if (ReadInt32(data, 0) != 1396986706) { return(false); } byte[] array = new byte[16]; Buffer.BlockCopy(data, 4, array, 0, 16); Guid a = new Guid(array); Buffer.BlockCopy(image.PdbHeap.Id, 0, array, 0, 16); Guid b = new Guid(array); if (a != b) { return(false); } ReadModule(); return(true); }
public bool ProcessDebugHeader(ImageDebugHeader header) { if (image == module.Image) { return(true); } var entry = header.GetCodeViewEntry(); if (entry == null) { return(false); } var data = entry.Data; if (data.Length < 24) { return(false); } var magic = ReadInt32(data, 0); if (magic != 0x53445352) { return(false); } var buffer = new byte [16]; Buffer.BlockCopy(data, 4, buffer, 0, 16); var module_guid = new Guid(buffer); Buffer.BlockCopy(image.PdbHeap.Id, 0, buffer, 0, 16); var pdb_guid = new Guid(buffer); if (module_guid != pdb_guid) { return(false); } ReadModule(); return(true); }
public bool ProcessDebugHeader(ImageDebugHeader header) { if (image == module.Image) { return(true); } foreach (var entry in header.Entries) { if (!IsMatchingEntry(image.PdbHeap, entry)) { continue; } ReadModule(); return(true); } return(false); }
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 bool ProcessDebugHeader(ImageDebugHeader header) { return(reader.ProcessDebugHeader(header)); }