public void GetPosition() { var outputBuf = new MemoryStream(); var writer = new BinaryStreamWriter(outputBuf); writer.WriteByte(12); Assert.AreEqual(1L, writer.Position); }
public void SetPosition_SameValue() { var outputBuf = new MemoryStream(); var writer = new BinaryStreamWriter(outputBuf); writer.WriteByte(12); writer.Position = 1; Assert.AreEqual(1L, outputBuf.Position); }
static void Main(string[] args) { var pe = new PEFile(); var originalBytes = Properties.Resources.console_anycpu; var reader = new BinaryStreamReader(new MemoryStream(originalBytes), new byte[1024]); pe.ReadFrom(reader); using (var output = File.Create("console.anycpu.exe")) { var writer = new BinaryStreamWriter(output); pe.WriteTo(writer); while (reader.Position < originalBytes.Length) { writer.WriteByte(reader.ReadByte()); } } }
static void WriteOptionalHeader(OptionalHeader optionalHeader, BinaryStreamWriter writer) { writer.WriteUInt16((ushort)optionalHeader.PEMagic); writer.WriteByte(optionalHeader.MajorLinkerVersion); writer.WriteByte(optionalHeader.MinorLinkerVersion); writer.WriteUInt32(optionalHeader.SizeOfCode); writer.WriteUInt32(optionalHeader.SizeOfInitializedData); writer.WriteUInt32(optionalHeader.SizeOfUninitializedData); writer.WriteUInt32(optionalHeader.AddressOfEntryPoint); writer.WriteUInt32(optionalHeader.BaseOfCode); if (optionalHeader.PEMagic == PEMagic.NT32) { writer.WriteUInt32(optionalHeader.BaseOfData); writer.WriteUInt32(checked((uint)optionalHeader.ImageBase)); } else { writer.WriteUInt64(optionalHeader.ImageBase); } writer.WriteUInt32(optionalHeader.SectionAlignment); writer.WriteUInt32(optionalHeader.FileAlignment); writer.WriteUInt16(optionalHeader.MajorOperatingSystemVersion); writer.WriteUInt16(optionalHeader.MinorOperatingSystemVersion); writer.WriteUInt16(optionalHeader.MajorImageVersion); writer.WriteUInt16(optionalHeader.MinorImageVersion); writer.WriteUInt16(optionalHeader.MajorSubsystemVersion); writer.WriteUInt16(optionalHeader.MinorSubsystemVersion); writer.WriteUInt32(optionalHeader.Win32VersionValue); writer.WriteUInt32(optionalHeader.SizeOfImage); writer.WriteUInt32(optionalHeader.SizeOfHeaders); writer.WriteUInt32(optionalHeader.CheckSum); writer.WriteUInt16((ushort)optionalHeader.Subsystem); writer.WriteUInt16((ushort)optionalHeader.DllCharacteristics); if (optionalHeader.PEMagic == PEMagic.NT32) { writer.WriteUInt32(checked((uint)optionalHeader.SizeOfStackReserve)); writer.WriteUInt32(checked((uint)optionalHeader.SizeOfStackCommit)); writer.WriteUInt32(checked((uint)optionalHeader.SizeOfHeapReserve)); writer.WriteUInt32(checked((uint)optionalHeader.SizeOfHeapCommit)); } else { writer.WriteUInt64(optionalHeader.SizeOfStackReserve); writer.WriteUInt64(optionalHeader.SizeOfStackCommit); writer.WriteUInt64(optionalHeader.SizeOfHeapReserve); writer.WriteUInt64(optionalHeader.SizeOfHeapCommit); } writer.WriteUInt32(optionalHeader.LoaderFlags); writer.WriteUInt32(optionalHeader.NumberOfRvaAndSizes); for (int i = 0; i < optionalHeader.DataDirectories.Length; i++) { writer.WriteUInt32(optionalHeader.DataDirectories[i].VirtualAddress); writer.WriteUInt32(optionalHeader.DataDirectories[i].Size); } }