コード例 #1
0
        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);
        }
コード例 #2
0
 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);
     }
 }