private static BaseRelocationBlock[] GetBaseRelocationsFor(string file, PEFile pe) { var stream = new MemoryStream(File.ReadAllBytes(file)); var reader = new BinaryStreamReader(stream, new byte[1024]); pe.ReadFrom(reader); var baseRelocationDirectory = pe.OptionalHeader.DataDirectories[(int)DataDirectoryKind.BaseRelocation]; var rvaStream = new RvaStream( stream, pe.SectionHeaders.Select( s => new RvaStream.Range { PhysicalAddress = s.PointerToRawData, Size = s.VirtualSize, VirtualAddress = s.VirtualAddress }) .ToArray()); rvaStream.Position = baseRelocationDirectory.VirtualAddress; var sectionReader = new BinaryStreamReader(rvaStream, new byte[32]); var result = BaseRelocationBlock.ReadBlocks(sectionReader, baseRelocationDirectory.Size); return result; }
static ResourceDirectory GetResourcesFor(string file, PEFile pe) { var stream = new MemoryStream(File.ReadAllBytes(file)); var reader = new BinaryStreamReader(stream, new byte[1024]); pe.ReadFrom(reader); var resDataDir = pe.OptionalHeader.DataDirectories[(int)DataDirectoryKind.Resources]; var rvaStream = new RvaStream( stream, pe.SectionHeaders.Select( s => new RvaStream.Range { PhysicalAddress = s.PointerToRawData, Size = s.VirtualSize, VirtualAddress = s.VirtualAddress }) .ToArray()); rvaStream.Position = resDataDir.VirtualAddress; var sectionReader = new BinaryStreamReader(rvaStream, new byte[32]); var res = new ResourceDirectory(); res.Read(sectionReader); return res; }
private static Mi.PE.Unmanaged.Export.Header GetExportFor(string file, PEFile pe) { var stream = new MemoryStream(File.ReadAllBytes(file)); var reader = new BinaryStreamReader(stream, new byte[1024]); pe.ReadFrom(reader); var exportDirectory = pe.OptionalHeader.DataDirectories[(int)DataDirectoryKind.ExportSymbols]; var rvaStream = new RvaStream( stream, pe.SectionHeaders.Select( s => new RvaStream.Range { PhysicalAddress = s.PointerToRawData, Size = s.VirtualSize, VirtualAddress = s.VirtualAddress }) .ToArray()); rvaStream.Position = exportDirectory.VirtualAddress; var sectionReader = new BinaryStreamReader(rvaStream, new byte[32]); var exports = new Mi.PE.Unmanaged.Export.Header(); exports.ReadExports(sectionReader, exportDirectory.Size); return exports; }
private static ModuleDefinition GetClrBasicsFor(string file, PEFile pe) { var stream = new MemoryStream(File.ReadAllBytes(file)); var reader = new BinaryStreamReader(stream, new byte[1024]); pe.ReadFrom(reader); var clrDirectory = pe.OptionalHeader.DataDirectories[(int)DataDirectoryKind.Clr]; var rvaStream = new RvaStream( stream, pe.SectionHeaders.Select( s => new RvaStream.Range { PhysicalAddress = s.PointerToRawData, Size = s.VirtualSize, VirtualAddress = s.VirtualAddress }) .ToArray()); rvaStream.Position = clrDirectory.VirtualAddress; var sectionReader = new BinaryStreamReader(rvaStream, new byte[32]); var clrmod = new ModuleDefinition(); ClrModuleReader.Read(sectionReader, clrmod); return clrmod; }
public void EndWrite() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.EndWrite(null); }
public void SetLength() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.SetLength(10); }
public void CanWrite() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); Assert.IsFalse(stream.CanWrite); }
public void GetPosition_OutsideOfRange() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var stream = new RvaStream(new MemoryStream(bytes), new RvaStream.Range { PhysicalAddress = 2, VirtualAddress = 34, Size = 4 }); long position = stream.Position; }
public void CanTimeout_False() { var stream = new RvaStream(new CanTimeoutStream(false), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); Assert.IsFalse(stream.CanTimeout); }
public void Seek_Invalid() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.Seek(10, (SeekOrigin)21633); }
public void BeginWrite() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.BeginWrite( new byte[2], 0, 2, ir => { }, null); }
public void CanSeek() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); Assert.IsTrue(stream.CanSeek); }
public void Flush() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.Flush(); }
public void Read_AtWrongOffset() { var rawStream = new MemoryStream(new byte[5]); var stream = new RvaStream(rawStream, new RvaStream.Range { PhysicalAddress = 2, VirtualAddress = 34, Size = 3 }); rawStream.Position = 34; byte[] result = new byte[4]; stream.Read(result, 0, 4); }
public void GetReadTimeout() { var stream = new RvaStream( new ReadTimeoutStream { ReadTimeout = 314 }, new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); Assert.AreEqual(314, stream.ReadTimeout); }
public void Read_CorrectPosition() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var stream = new RvaStream(new MemoryStream(bytes), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 5 }); stream.Position = 34; byte[] result = new byte[4]; stream.Read(result, 0, 4); Assert.AreEqual(34 + 4, (int)stream.Position); }
public void SetReadTimeout() { var rawStream = new ReadTimeoutStream(); var stream = new RvaStream( rawStream, new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.ReadTimeout = 214; Assert.AreEqual(214, rawStream.ReadTimeout); }
public void Length() { var rawStream = new MemoryStream(new byte[200]); var stream = new RvaStream( rawStream, new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 3 }, new RvaStream.Range { PhysicalAddress = 3, VirtualAddress = 40, Size = 2 }); Assert.AreEqual(42, (int)stream.Length); }
public void BeginEndRead_CorrectPosition() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var stream = new RvaStream(new MemoryStream(bytes), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 5 }); stream.Position = 34; byte[] result = new byte[4]; var ar = stream.BeginRead( result, 0, 4, ar_ => { }, null); stream.EndRead(ar); Assert.AreEqual(34 + 4, (int)stream.Position); }
public void GetPosition() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var rawStream = new MemoryStream(bytes); var stream = new RvaStream( rawStream, new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 3 }, new RvaStream.Range { PhysicalAddress = 3, VirtualAddress = 40, Size = 2 }); rawStream.Position = 4; Assert.AreEqual(41, (int)stream.Position); }
public void Seek_End() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var rawStream = new MemoryStream(bytes); var stream = new RvaStream( rawStream, new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 3 }, new RvaStream.Range { PhysicalAddress = 3, VirtualAddress = 40, Size = 2 }); stream.Seek(-1, SeekOrigin.End); Assert.AreEqual(4, (int)rawStream.Position); }
public void Read_CorrectResult() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var stream = new RvaStream(new MemoryStream(bytes), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 5 }); stream.Position = 34; byte[] result = new byte[5]; stream.Read(result, 0, 5); Assert.AreEqual(bytes.Length, result.Length, "result.Length"); for (int i = 0; i < result.Length; i++) { Assert.AreEqual(bytes[i], result[i], "result[" + i + "]"); } }
public void BeginEndRead_CorrectResult() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var stream = new RvaStream(new MemoryStream(bytes), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 5 }); stream.Position = 34; byte[] result = new byte[5]; var ar = stream.BeginRead( result, 0, 5, ar_ => { }, null); stream.EndRead(ar); Assert.AreEqual(bytes.Length, result.Length, "result.Length"); for (int i = 0; i < result.Length; i++) { Assert.AreEqual(bytes[i], result[i], "result[" + i + "]"); } }
public void SetPosition_OutsideOfRange() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var stream = new RvaStream(new MemoryStream(bytes), new RvaStream.Range { PhysicalAddress = 2, VirtualAddress = 34, Size = 4 }); stream.Position = 1; }
public void SetPosition() { byte[] bytes = new byte[] { 1, 200, 3, 4, 5 }; var rawStream = new MemoryStream(bytes); var stream = new RvaStream( rawStream, new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 34, Size = 3 }, new RvaStream.Range { PhysicalAddress = 3, VirtualAddress = 40, Size = 2 }); stream.Position = 41; Assert.AreEqual(4, (int)rawStream.Position); }
public void Constructor() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); }
public void WriteByte() { var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); stream.WriteByte(2); }
public void Constructor_NullRangeArray() { RvaStream.Range[] array = null; var stream = new RvaStream(new MemoryStream(), array); }
public void Constructor_NullStream() { var stream = new RvaStream(null); }
public void Constructor_EmptyRangeArray() { var stream = new RvaStream(new MemoryStream()); }
public void CanTimeout_True() { var stream = new RvaStream(new CanTimeoutStream(true), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 }); Assert.IsTrue(stream.CanTimeout); }
public void Constructor_NoSeekStream() { var stream = new RvaStream(new NoSeekStream()); }