Exemple #1
0
        /// <summary>
        /// Create a PE header from file
        /// </summary>
        /// <param name="reader">the reader</param>
        /// <param name="dosHeader">the previous DOS header</param>
        public PE_Header(Reader reader, DOS_Header dosHeader)
        {
            this.reader = reader;

            this.entries = new List <Entry>();

            this.dosHeader = dosHeader;

            if (!isValidPeHeader())
            {
                throw new BadPeHeaderException();
            }

            this.headerBaseAddress = this.dosHeader.peHeaderOffset.getValue() + HeaderSymbols.PE_HEADER.Length; // PE..

            setupStruct();

            // simple proxy
            this.PeHeaderOffset = dosHeader.peHeaderOffset;

            ///
            /// init values
            ///

            foreach (var item in entries)
            {
                item.readValue(this.reader);
            }
        }
Exemple #2
0
        /// <summary>
        /// Create a PE header from memory
        /// </summary>
        /// <param name="dosHeader">the previous DOS header</param>
        public PE_Header(DOS_Header dosHeader)
        {
            ///
            /// init header
            ///

            this.entries = new List <Entry>();

            this.dosHeader = dosHeader;

            this.headerBaseAddress = this.dosHeader.peHeaderOffset.getValue() + HeaderSymbols.PE_HEADER.Length; // PE..

            setupStruct();

            // simple proxy
            this.PeHeaderOffset = dosHeader.peHeaderOffset;

            ///
            /// init values
            ///

            // x32 bit as default
            this.Architecture.setValue(Machines.INTEL386);

            // new PE objects are empty
            this.NumberOfSection.setValue(0);

            // indicates when the file was created
            // TODO
            this.TimeDateStamp.setValue(0);

            // new PE objects don't have symbols
            this.PointerToSymbolTable.setValue(0);

            // new PE objects don't have symbols
            this.NumberOfSymbols.setValue(0);

            // will be written after creating it
            this.SizeOfOptionalHeader.setValue(0);

            int characteristics = (int)Types.Characteristics.IMAGE_FILE_EXECUTABLE_IMAGE + (int)Types.Characteristics.IMAGE_FILE_LARGE_ADDRESS_AWARE;

            // general characteristics
            this.Characteristics.setValue(characteristics);
        }