コード例 #1
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="reader">PE file reader pointing to the start of this section</param>
		/// <param name="verify">Verify section</param>
		/// <exception cref="BadImageFormatException">Thrown if verification fails</exception>
		public ImageNTHeaders(IImageStream reader, bool verify) {
			SetStartOffset(reader);
			this.signature = reader.ReadUInt32();
			if (verify && this.signature != 0x4550)
				throw new BadImageFormatException("Invalid NT headers signature");
			this.imageFileHeader = new ImageFileHeader(reader, verify);
			this.imageOptionalHeader = CreateImageOptionalHeader(reader, verify);
			SetEndoffset(reader);
		}
コード例 #2
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="reader">PE file reader pointing to the start of this section</param>
 /// <param name="verify">Verify section</param>
 /// <exception cref="BadImageFormatException">Thrown if verification fails</exception>
 public ImageNTHeaders(IImageStream reader, bool verify)
 {
     SetStartOffset(reader);
     this.signature = reader.ReadUInt32();
     if (verify && this.signature != 0x4550)
     {
         throw new BadImageFormatException("Invalid NT headers signature");
     }
     this.imageFileHeader     = new ImageFileHeader(reader, verify);
     this.imageOptionalHeader = CreateImageOptionalHeader(reader, verify);
     SetEndoffset(reader);
 }
コード例 #3
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="reader">PE file reader pointing to the start of this section</param>
 /// <param name="verify">Verify section</param>
 /// <exception cref="BadImageFormatException">Thrown if verification fails</exception>
 public ImageNTHeaders(ref DataReader reader, bool verify)
 {
     SetStartOffset(ref reader);
     signature = reader.ReadUInt32();
     // Mono only checks the low 2 bytes
     if (verify && (ushort)signature != 0x4550)
     {
         throw new BadImageFormatException("Invalid NT headers signature");
     }
     imageFileHeader     = new ImageFileHeader(ref reader, verify);
     imageOptionalHeader = CreateImageOptionalHeader(ref reader, verify);
     SetEndoffset(ref reader);
 }
コード例 #4
0
        private void SetupValues()
        {
            if (_loaded_values)
            {
                return;
            }

            _loaded_values  = true;
            _image_sections = new List <ImageSection>();
            IntPtr base_ptr = GetBasePointer();

            if (base_ptr == IntPtr.Zero)
            {
                return;
            }

            IntPtr header_ptr = GetHeaderPointer(base_ptr);

            if (header_ptr == IntPtr.Zero)
            {
                return;
            }

            ImageNtHeaders header = (ImageNtHeaders)Marshal.PtrToStructure(header_ptr, typeof(ImageNtHeaders));
            var            buffer = header_ptr + Marshal.SizeOf(header) + header.FileHeader.SizeOfOptionalHeader;

            ImageSectionHeader[] section_headers = new ImageSectionHeader[header.FileHeader.NumberOfSections];
            int header_size = Marshal.SizeOf(typeof(ImageSectionHeader));

            for (int i = 0; i < header.FileHeader.NumberOfSections; ++i)
            {
                ImageSectionHeader section = (ImageSectionHeader)Marshal.PtrToStructure(buffer + i * header_size, typeof(ImageSectionHeader));
                _image_sections.Add(new ImageSection(section, MappedAsImage, base_ptr));
            }

            IImageOptionalHeader optional_header = GetOptionalHeader(header_ptr);

            if (optional_header == null)
            {
                return;
            }

            _image_base_address  = optional_header.GetImageBase();
            _image_entry_point   = optional_header.GetAddressOfEntryPoint();
            _is_64bit            = optional_header.GetMagic() == IMAGE_NT_OPTIONAL_HDR_MAGIC.HDR64;
            _dll_characteristics = optional_header.GetDllCharacteristics();
        }