public void FromStream(Stream stream, int size) { long start = stream.Position; BinaryReader reader = new BinaryReader(stream, Encoding.ASCII); ushort magic = reader.ReadUInt16(); stream.Seek(start, SeekOrigin.Begin); _optionalHeaderBase = null; switch (magic) { case Constants.IMAGE_NT_OPTIONAL_HDR32_MAGIC: _optionalHeaderBase = new OptionalHeaderPE32(); break; case Constants.IMAGE_NT_OPTIONAL_HDR64_MAGIC: _optionalHeaderBase = new OptionalHeaderPE64(); break; case Constants.IMAGE_ROM_OPTIONAL_HDR_MAGIC: //_optionalHeaderBase = new OptionalHeaderPE32(); //break; default: break; } if (_optionalHeaderBase != null) { _optionalHeaderBase.FromStream(stream); } stream.Seek(start + size, SeekOrigin.Begin); }