/// <inheritdoc/> public void Dispose() { if (Chunk != null) { Chunk.Data.Dispose(); } Chunk = null; PESection = null; }
/// <summary> /// Saves any data that is appended to the original PE file /// </summary> private void CreateExtraData() { if (!Options.KeepExtraPEData) { return; } var lastOffs = GetLastFileSectionOffset(); extraData = new BinaryReaderChunk(peImage.CreateStream((FileOffset)lastOffs)); if (extraData.Data.Length == 0) { extraData.Data.Dispose(); extraData = null; } }
/// <summary> /// Creates the PE header "section" /// </summary> private void CreateHeaderSection() { uint afterLastSectHeader = GetOffsetAfterLastSectionHeader() + (uint)sections.Count * 0x28; uint firstRawOffset = Math.Min(GetFirstRawDataFileOffset(), peImage.ImageNTHeaders.OptionalHeader.SectionAlignment); uint headerLen = afterLastSectHeader; if (firstRawOffset > headerLen) { headerLen = firstRawOffset; } headerLen = Utils.AlignUp(headerLen, peImage.ImageNTHeaders.OptionalHeader.FileAlignment); if (headerLen <= peImage.ImageNTHeaders.OptionalHeader.SectionAlignment) { headerSection = new BinaryReaderChunk(peImage.CreateStream(0, headerLen)); return; } //TODO: Support this too throw new ModuleWriterException("Could not create header"); }