public PEFile Read(Stream stream)
        {
            var dosHeader = DosHeaderReader.Read(stream);

            uint fillingByteCount = dosHeader.lfanew - DosHeaderReader.DosHeaderSize;

            byte[] fillingBytes = fillingByteCount > 0 ? new byte[fillingByteCount] : null;
            stream.CheckedReadBytes(fillingBytes, "seeking to PE header");

            stream.CheckedExpect(
                (byte)'P', (byte)'E',
                0, 0,
                "reading PE singature");

            var peHeader = PEHeaderReader.Read(stream);

            var optionalHeader = OptionalHeaderReader.Read(
                stream,
                peHeader.SizeOfOptionalHeader);

            Section[] sections;
            if (peHeader.NumberOfSections > 0)
            {
                sections = new Section[peHeader.NumberOfSections];

                for (int i = 0; i < sections.Length; i++)
                {
                    sections[i] = SectionHeaderReader.Read(stream);
                }
            }
            else
            {
                sections = null;
            }

            return(new PEFile
            {
                DosHeader = dosHeader,
                Header = peHeader,
                OptionalHeader = optionalHeader,
                Sections = sections
            });
        }
Exemplo n.º 2
0
 public void Before_Each_Test()
 {
     this.target = new SectionHeaderReader();
 }