コード例 #1
0
ファイル: Program.cs プロジェクト: BGCX261/zoompe-git
        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;
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: BGCX261/zoompe-git
        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;
        }
コード例 #3
0
ファイル: Program.cs プロジェクト: BGCX261/zoompe-git
        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;
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: BGCX261/zoompe-git
        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;
        }
コード例 #5
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        public void EndWrite()
        {
            var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range {
                PhysicalAddress = 0, VirtualAddress = 0, Size = 5
            });

            stream.EndWrite(null);
        }
コード例 #6
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        public void SetLength()
        {
            var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range {
                PhysicalAddress = 0, VirtualAddress = 0, Size = 5
            });

            stream.SetLength(10);
        }
コード例 #7
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #8
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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;
 }
コード例 #9
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        public void CanTimeout_False()
        {
            var stream = new RvaStream(new CanTimeoutStream(false), new RvaStream.Range {
                PhysicalAddress = 0, VirtualAddress = 0, Size = 5
            });

            Assert.IsFalse(stream.CanTimeout);
        }
コード例 #10
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #11
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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);
 }
コード例 #12
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #13
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        public void Flush()
        {
            var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range {
                PhysicalAddress = 0, VirtualAddress = 0, Size = 5
            });

            stream.Flush();
        }
コード例 #14
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #15
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #16
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #17
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #18
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #19
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #20
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #21
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #22
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #23
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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 + "]");
            }
        }
コード例 #24
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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 + "]");
            }
        }
コード例 #25
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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;
 }
コード例 #26
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #27
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void SetLength()
 {
     var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 });
     stream.SetLength(10);
 }
コード例 #28
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor()
 {
     var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range {
         PhysicalAddress = 0, VirtualAddress = 0, Size = 5
     });
 }
コード例 #29
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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);
 }
コード例 #30
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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);
 }
コード例 #31
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void WriteByte()
 {
     var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 });
     stream.WriteByte(2);
 }
コード例 #32
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_NullRangeArray()
 {
     RvaStream.Range[] array = null;
     var stream = new RvaStream(new MemoryStream(), array);
 }
コード例 #33
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Flush()
 {
     var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 });
     stream.Flush();
 }
コード例 #34
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_NullStream()
 {
     var stream = new RvaStream(null);
 }
コード例 #35
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_NullRangeArray()
 {
     RvaStream.Range[] array = null;
     var stream = new RvaStream(new MemoryStream(), array);
 }
コード例 #36
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_EmptyRangeArray()
 {
     var stream = new RvaStream(new MemoryStream());
 }
コード例 #37
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_EmptyRangeArray()
 {
     var stream = new RvaStream(new MemoryStream());
 }
コード例 #38
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor()
 {
     var stream = new RvaStream(new MemoryStream(new byte[5]), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 });
 }
コード例 #39
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #40
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #41
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        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);
        }
コード例 #42
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_NullStream()
 {
     var stream = new RvaStream(null);
 }
コード例 #43
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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);
 }
コード例 #44
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
        public void CanTimeout_True()
        {
            var stream = new RvaStream(new CanTimeoutStream(true), new RvaStream.Range { PhysicalAddress = 0, VirtualAddress = 0, Size = 5 });

            Assert.IsTrue(stream.CanTimeout);
        }
コード例 #45
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 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);
 }
コード例 #46
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_NoSeekStream()
 {
     var stream = new RvaStream(new NoSeekStream());
 }
コード例 #47
0
ファイル: RvaStreamTests.cs プロジェクト: BGCX261/zoompe-git
 public void Constructor_NoSeekStream()
 {
     var stream = new RvaStream(new NoSeekStream());
 }