/// <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); } }
/// <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); }