示例#1
0
 /// <inheritdoc/>
 public void Dispose()
 {
     if (Chunk != null)
     {
         Chunk.Data.Dispose();
     }
     Chunk     = null;
     PESection = null;
 }
示例#2
0
        /// <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;
            }
        }
示例#3
0
        /// <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");
        }