/// <summary> /// Reads the code view debug data from the specified set of debug directories. /// </summary> /// <param name="debugDirectories">The set of debug directories.</param> /// <param name="endAddress">End Address of the image.</param> /// <returns>The code view if found, null otherwise.</returns> private CodeViewDebugData GetCodeViewDebugData(DebugDirectory[] debugDirectories, IntPtr endAddress) { foreach (DebugDirectory debugDirectory in debugDirectories) { if (debugDirectory.Type != ImageDebugType.CodeView) { continue; } if (debugDirectory.SizeOfData > 1000) { return(null); } BinaryReader reader = this.ReadAtRelativeVirtualAddress((int)debugDirectory.AddressOfRawData, (int)debugDirectory.SizeOfData); int signature = reader.ReadInt32(); if (signature != PEImageReader.CodeViewSignature) { return(null); } CodeViewDebugData codeView = new CodeViewDebugData( new Guid(reader.ReadBytes(16)), (int)reader.ReadUInt32(), this.ReadNullTerminatedUTF8String(reader), endAddress); return(codeView); } return(null); }
/// <summary> /// Reads the code view debug data from the specified set of debug directories. /// </summary> /// <param name="debugDirectories">The set of debug directories.</param> /// <param name="endAddress">End Address of the image.</param> /// <returns>The code view if found, null otherwise.</returns> private CodeViewDebugData GetCodeViewDebugData(DebugDirectory[] debugDirectories, IntPtr endAddress) { foreach (DebugDirectory debugDirectory in debugDirectories) { if (debugDirectory.Type != ImageDebugType.CodeView) { continue; } if (debugDirectory.SizeOfData > 1000) { return null; } BinaryReader reader = this.ReadAtRelativeVirtualAddress((int)debugDirectory.AddressOfRawData, (int)debugDirectory.SizeOfData); int signature = reader.ReadInt32(); if (signature != PEImageReader.CodeViewSignature) { return null; } CodeViewDebugData codeView = new CodeViewDebugData( new Guid(reader.ReadBytes(16)), (int)reader.ReadUInt32(), this.ReadNullTerminatedUTF8String(reader), endAddress); return codeView; } return null; }