1

I found a link: http://code.cheesydesign.com/?p=572 about reading PE Files. I am using this code but unfortunately, I get an error on ntHeadersSignature (on reader.ReadUint32). It says that it's unable to read beyond the stream. I wonder why and how to fix this error since I tried with peekchar and read it with readint32, converting it to uint doesn't work. Thank you for your sincere help!

public PeHeaderReader(string filePath)
{
    // Read in the DLL or EXE and get the timestamp
    using (FileStream stream = new FileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read))
    {
        BinaryReader reader = new BinaryReader(stream);
        dosHeader = FromBinaryReader<IMAGE_DOS_HEADER>(reader);

        // Add 4 bytes to the offset
        stream.Seek(dosHeader.e_lfanew, SeekOrigin.Begin);

        UInt32 ntHeadersSignature = reader.ReadUInt32(); //HERE IS THE ERROR
        fileHeader = FromBinaryReader<IMAGE_FILE_HEADER>(reader);

        if (this.Is32BitHeader)
        {
            optionalHeader32 = FromBinaryReader<IMAGE_OPTIONAL_HEADER32>(reader);
        }
        else
        {
            optionalHeader64 = FromBinaryReader<IMAGE_OPTIONAL_HEADER64>(reader);
        }

        imageSectionHeaders = new IMAGE_SECTION_HEADER[fileHeader.NumberOfSections];

        for(int headerNo = 0; headerNo < imageSectionHeaders.Length; ++headerNo)
        {
            imageSectionHeaders[headerNo] = FromBinaryReader<IMAGE_SECTION_HEADER>(reader);
        }
    }
}
4

0 回答 0