public static ImageDebugHeader AddDeterministicEntry(this ImageDebugHeader header) { var entry = new ImageDebugHeaderEntry(new ImageDebugDirectory { Type = ImageDebugType.Deterministic }, Empty <byte> .Array); if (header == null) { return(new ImageDebugHeader(entry)); } var entries = new ImageDebugHeaderEntry [header.Entries.Length + 1]; Array.Copy(header.Entries, entries, header.Entries.Length); entries [entries.Length - 1] = entry; return(new ImageDebugHeader(entries)); }
public static ImageDebugHeader Read(BinaryReader reader) { var entries = new ImageDebugHeaderEntry[reader.ReadByte()]; for (int i = 0; i < entries.Length; ++i) { var directory = new ImageDebugDirectory { Characteristics = reader.ReadInt32(), TimeDateStamp = reader.ReadInt32(), MajorVersion = reader.ReadInt16(), MinorVersion = reader.ReadInt16(), Type = (ImageDebugType)reader.ReadInt32(), SizeOfData = reader.ReadInt32() }; entries[i] = new ImageDebugHeaderEntry(directory, reader.ReadBytes(directory.SizeOfData)); } return(new ImageDebugHeader(entries)); }
private void ReadDebugHeader() { if (image.Debug.IsZero) { image.DebugHeader = new ImageDebugHeader(Empty <ImageDebugHeaderEntry> .Array); } else { MoveTo(image.Debug); ImageDebugHeaderEntry[] array = new ImageDebugHeaderEntry[(int)image.Debug.Size / 28]; for (int i = 0; i < array.Length; i++) { ImageDebugDirectory imageDebugDirectory = default(ImageDebugDirectory); imageDebugDirectory.Characteristics = ReadInt32(); imageDebugDirectory.TimeDateStamp = ReadInt32(); imageDebugDirectory.MajorVersion = ReadInt16(); imageDebugDirectory.MinorVersion = ReadInt16(); imageDebugDirectory.Type = (ImageDebugType)ReadInt32(); imageDebugDirectory.SizeOfData = ReadInt32(); imageDebugDirectory.AddressOfRawData = ReadInt32(); imageDebugDirectory.PointerToRawData = ReadInt32(); ImageDebugDirectory imageDebugDirectory2 = imageDebugDirectory; if (imageDebugDirectory2.AddressOfRawData == 0) { array[i] = new ImageDebugHeaderEntry(imageDebugDirectory2, Empty <byte> .Array); } else { int position = base.Position; try { base.MoveTo((uint)imageDebugDirectory2.PointerToRawData); byte[] data = ReadBytes(imageDebugDirectory2.SizeOfData); array[i] = new ImageDebugHeaderEntry(imageDebugDirectory2, data); } finally { base.Position = position; } } } image.DebugHeader = new ImageDebugHeader(array); } }
void ReadDebugHeader() { if (image.Debug.IsZero) { image.DebugHeader = new ImageDebugHeader(Empty <ImageDebugHeaderEntry> .Array); return; } MoveTo(image.Debug); var entries = new ImageDebugHeaderEntry [(int)image.Debug.Size / ImageDebugDirectory.Size]; for (int i = 0; i < entries.Length; i++) { var directory = new ImageDebugDirectory { Characteristics = ReadInt32(), TimeDateStamp = ReadInt32(), MajorVersion = ReadInt16(), MinorVersion = ReadInt16(), Type = (ImageDebugType)ReadInt32(), SizeOfData = ReadInt32(), AddressOfRawData = ReadInt32(), PointerToRawData = ReadInt32(), }; if (directory.AddressOfRawData == 0) { entries [i] = new ImageDebugHeaderEntry(directory, Empty <byte> .Array); continue; } var position = Position; try { MoveTo((uint)directory.PointerToRawData); var data = ReadBytes(directory.SizeOfData); entries [i] = new ImageDebugHeaderEntry(directory, data); } finally { Position = position; } } image.DebugHeader = new ImageDebugHeader(entries); }
private static ImageDebugHeaderEntry ProcessEntry(ImageDebugHeaderEntry entry) { if (entry.Directory.Type != ImageDebugType.CodeView) { return(entry); } var reader = new ByteBuffer(entry.Data); var writer = new ByteBuffer(); var sig = reader.ReadUInt32(); if (sig != 0x53445352) { return(entry); } writer.WriteUInt32(sig); // RSDS writer.WriteBytes(reader.ReadBytes(16)); // MVID writer.WriteUInt32(reader.ReadUInt32()); // Age var length = Array.IndexOf(entry.Data, (byte)0, reader.position) - reader.position; var fullPath = Encoding.UTF8.GetString(reader.ReadBytes(length)); writer.WriteBytes(Encoding.UTF8.GetBytes(Path.GetFileName(fullPath))); writer.WriteByte(0); var newData = new byte [writer.length]; Buffer.BlockCopy(writer.buffer, 0, newData, 0, writer.length); var directory = entry.Directory; directory.SizeOfData = newData.Length; return(new ImageDebugHeaderEntry(directory, newData)); }
private void WriteDebugDirectory() { int num = (int)BaseStream.Position + debug_header.Entries.Length * 28; for (int i = 0; i < debug_header.Entries.Length; i++) { ImageDebugHeaderEntry imageDebugHeaderEntry = debug_header.Entries[i]; ImageDebugDirectory directory = imageDebugHeaderEntry.Directory; base.WriteInt32(directory.Characteristics); base.WriteInt32(directory.TimeDateStamp); base.WriteInt16(directory.MajorVersion); base.WriteInt16(directory.MinorVersion); base.WriteInt32((int)directory.Type); base.WriteInt32(directory.SizeOfData); base.WriteInt32(directory.AddressOfRawData); base.WriteInt32(num); num += imageDebugHeaderEntry.Data.Length; } for (int j = 0; j < debug_header.Entries.Length; j++) { ImageDebugHeaderEntry imageDebugHeaderEntry2 = debug_header.Entries[j]; base.WriteBytes(imageDebugHeaderEntry2.Data); } }