internal static IMAGE_NT_HEADERS FromBinaryReader(BinaryReader reader) { IMAGE_NT_HEADERS ret = new IMAGE_NT_HEADERS(); ret.Signature = reader.ReadUInt32(); if (ret.Signature != IMAGE_NT_SIGNATURE) { return(null); } ret.FileHeader = IMAGE_FILE_HEADER.FromBinaryReader(reader); if (ret.FileHeader == null) { return(null); } ret.OptionalHeader = IMAGE_OPTIONAL_HEADER.FromBinaryReader(reader); if (ret.OptionalHeader == null) { return(null); } return(ret); }
internal static Win32ExeHeader FromBinaryReader(BinaryReader reader) { try { long startPosition = reader.BaseStream.Position; long length = reader.BaseStream.Length - startPosition; if (length < 0x1000) { return(null); } Win32ExeHeader ret = new Win32ExeHeader(); ret.DosHeader = IMAGE_DOS_HEADER.FromBinaryReader(reader); if (ret.DosHeader == null) { return(null); } if (ret.DosHeader.e_lfanew <= 0) { return(ret); } reader.BaseStream.Seek(startPosition + ret.DosHeader.e_lfanew, SeekOrigin.Begin); ret.NtHeader = IMAGE_NT_HEADERS.FromBinaryReader(reader); if (ret.NtHeader == null) { return(null); } IMAGE_SECTION_HEADER section = IMAGE_SECTION_HEADER.FromBinaryReader(reader); while (section != null) { ret.SectionHeaders.Add(section); section = IMAGE_SECTION_HEADER.FromBinaryReader(reader); } return(ret); } catch { return(null); } }