Esempio n. 1
0
 /// <summary>
 /// Update a data directory
 /// </summary>
 /// <param name="writer">Writer</param>
 /// <param name="chunk">The data</param>
 public void WriteDataDirectory(BinaryWriter writer, IChunk chunk)
 {
     if (chunk == null || chunk.GetFileLength() == 0)
     {
         writer.Write(0UL);
     }
     else
     {
         writer.Write((uint)chunk.RVA);
         writer.Write(chunk.GetFileLength());
     }
 }
Esempio n. 2
0
        /// <summary>
        ///     Writes all data to <paramref name="writer" /> and verifies that all bytes were written
        /// </summary>
        /// <param name="chunk">this</param>
        /// <param name="writer">Destination</param>
        /// <exception cref="IOException">Not all bytes were written</exception>
        public static void VerifyWriteTo(this IChunk chunk, BinaryWriter writer)
        {
            var pos = writer.BaseStream.Position;

            chunk.WriteTo(writer);
            if (writer.BaseStream.Position - pos != chunk.GetFileLength())
            {
                throw new IOException("Did not write all bytes");
            }
        }
Esempio n. 3
0
        /// <summary>
        /// Writes all data to <paramref name="writer"/> and verifies that all bytes were written
        /// </summary>
        /// <param name="chunk">this</param>
        /// <param name="writer">Destination</param>
        /// <exception cref="IOException">Not all bytes were written</exception>
        public static void VerifyWriteTo(this IChunk chunk, DataWriter writer)
        {
            long pos = writer.Position;

            // Uncomment this to add some debug info, useful when comparing old vs new version
            //System.Diagnostics.Debug.WriteLine($" RVA 0x{(uint)chunk.RVA:X8} OFFS 0x{(uint)chunk.FileOffset:X8} VSIZE 0x{chunk.GetVirtualSize():X8} {chunk.GetType().FullName}");
            chunk.WriteTo(writer);
            if (writer.Position - pos != chunk.GetFileLength())
            {
                VerifyWriteToThrow(chunk);
            }
        }
Esempio n. 4
0
        /// <summary>
        /// Writes all data to <paramref name="writer"/> and verifies that all bytes were written
        /// </summary>
        /// <param name="chunk">this</param>
        /// <param name="writer">Destination</param>
        /// <exception cref="IOException">Not all bytes were written</exception>
        public static void VerifyWriteTo(this IChunk chunk, BinaryWriter writer)
        {
            long pos = writer.BaseStream.Position;

            // Uncomment this to add some debug info, useful when comparing old vs new version
            //System.Diagnostics.Debug.WriteLine(string.Format(" RVA 0x{0:X8} OFFS 0x{1:X8} VSIZE 0x{2:X8} {3}", (uint)chunk.RVA, (uint)chunk.FileOffset, chunk.GetVirtualSize(), chunk.GetType().FullName));
            chunk.WriteTo(writer);
            if (writer.BaseStream.Position - pos != chunk.GetFileLength())
            {
                throw new IOException("Did not write all bytes");
            }
        }
 /// <summary>
 /// Update a data directory
 /// </summary>
 /// <param name="writer">Writer</param>
 /// <param name="chunk">The data</param>
 public void WriteDataDirectory(BinaryWriter writer, IChunk chunk)
 {
     if (chunk == null || chunk.GetFileLength() == 0)
         writer.Write(0UL);
     else {
         writer.Write((uint)chunk.RVA);
         writer.Write(chunk.GetFileLength());
     }
 }