Exemplo n.º 1
0
        /// <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);
        }
Exemplo n.º 2
0
        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);
            }
        }