/// <summary> /// Parses a PEFile from a given stream. If it is valid, a new PEFile object is /// constructed and returned. Otherwise, null is returned. /// </summary> public static PEFile TryLoad(Stream stream, bool virt) { PEBuffer headerBuff = new PEBuffer(stream); PEHeader hdr = PEHeader.FromBuffer(headerBuff, virt); if (hdr == null) { return(null); } PEFile pefile = new PEFile(); pefile.Init(stream, "stream", virt, headerBuff, hdr); return(pefile); }
private void Init(Stream stream, string filePath, bool virt, PEBuffer buffer = null, PEHeader header = null) { if (buffer == null) { buffer = new PEBuffer(stream); } if (header == null) { header = PEHeader.FromBuffer(buffer, virt); } _virt = virt; _stream = stream; _headerBuff = buffer; Header = header; if (header != null && header.PEHeaderSize > _headerBuff.Length) { throw new InvalidOperationException("Bad PE Header in " + filePath); } }