/* uint Magic = 0x53445352; Guid Signature; uint Age; string FileName; */ public bool ProcessDebugHeader (ImageDebugDirectory directory, byte [] header) { if (header.Length < 24) return false; var magic = ReadInt32 (header, 0); if (magic != 0x53445352) return false; var guid_bytes = new byte [16]; Buffer.BlockCopy (header, 4, guid_bytes, 0, 16); this.guid = new Guid (guid_bytes); this.age = ReadInt32 (header, 20); return PopulateFunctions (); }
public ImageDebugDirectory GetDebugHeader (out byte [] header) { var section = GetSectionAtVirtualAddress (Debug.VirtualAddress); var buffer = new ByteBuffer (section.Data); buffer.position = (int) (Debug.VirtualAddress - section.VirtualAddress); var directory = new ImageDebugDirectory { Characteristics = buffer.ReadInt32 (), TimeDateStamp = buffer.ReadInt32 (), MajorVersion = buffer.ReadInt16 (), MinorVersion = buffer.ReadInt16 (), Type = buffer.ReadInt32 (), SizeOfData = buffer.ReadInt32 (), AddressOfRawData = buffer.ReadInt32 (), PointerToRawData = buffer.ReadInt32 (), }; buffer.position = (int) (directory.PointerToRawData - section.PointerToRawData); header = new byte [directory.SizeOfData]; Buffer.BlockCopy (buffer.buffer, buffer.position, header, 0, header.Length); return directory; }