예제 #1
0
        public void Set_Breakpoints_Correctly()
        {
            var options = new IndexOptions()
            {
                BreakpointMasks = new []
                {
                    new BreakpointMask("kernel32", "*create*"),
                    new BreakpointMask("kernel32", "*process*"),
                },
                AccessBreakpoints = new []
                {
                    new AccessBreakpoint(0x100, 8, true, false),
                }
            };
            var indexMethod = new IndexMethod();
            BreakpointFacadeBuilder breakpointFacadeBuilder = new BreakpointFacadeBuilder();

            indexMethod.BreakpointFacade = breakpointFacadeBuilder
                                           .WithSetBreakpointByMask()
                                           .WithSetReadAccessBreakpoint()
                                           .Build();
            indexMethod.SetBreakpoints(options);
            breakpointFacadeBuilder.Mock.Verify(facade => facade.SetBreakpointByMask(It.IsAny <string>(), It.IsAny <string>()), Times.Exactly(2));
            breakpointFacadeBuilder.Mock.Verify(facade => facade.SetReadAccessBreakpoint(It.IsAny <int>(), It.IsAny <ulong>()), Times.Once);
        }
예제 #2
0
        public void Set_Breakpoint_Correctly()
        {
            var builder = new BreakpointFacadeBuilder();

            builder.WithSetBreakpointByMask();
            var bp = BreakpointMask.Parse("kernel32!*");

            bp.SetBreakpoint(builder.Mock.Object);
            builder.Mock.Verify(facade => facade.SetBreakpointByMask("kernel32", "*"), Times.Once);
        }
예제 #3
0
        public void Set_Breakpoint_Correctly()
        {
            var bp      = AccessBreakpoint.Parse("rw8:abc000");
            var builder = new BreakpointFacadeBuilder();
            var facade  = builder
                          .WithSetReadAccessBreakpoint()
                          .WithSetWriteAccessBreakpoint()
                          .Build();

            bp.SetBreakpoint(facade);
            builder.Mock.Verify(breakpointFacade => breakpointFacade.SetReadAccessBreakpoint(8, 0xabc000), Times.Once);
            builder.Mock.Verify(breakpointFacade => breakpointFacade.SetWriteAccessBreakpoint(8, 0xabc000), Times.Once);
        }
예제 #4
0
        public void Upsert_Frames_From_Breaks()
        {
            var dbg = new DebugEngineProxyBuilder();
            var tt  = new TimeTravelFacadeBuilder(dbg);
            var sc  = new ServerClientBuilder();
            var bp  = new BreakpointFacadeBuilder();

            dbg.WithRunUntilBreak();
            var count = 0;

            dbg.SetRunUntilBreakCallback(() =>
            {
                if (count++ > 0)
                {
                    tt.AdvanceToNextPosition();
                }
            });
            var dbgEngProxy      = dbg.Build();
            var timeTravelFacade = tt.Build();
            var serverClient     = sc.Build();
            var bpFacade         = bp.Build();

            dbg.CurrentThreadId = MockFrames.SingleThreaded0.First().ThreadId;
            tt.WithFrames(MockFrames.SingleThreaded0);
            sc.WithUpsertFrames(() => { });

            var indexMethod = new IndexMethod
            {
                DebugEngineProxy = dbgEngProxy,
                TimeTravelFacade = timeTravelFacade,
                ServerClient     = serverClient,
                BreakpointFacade = bpFacade
            };

            indexMethod.ProcessInternal(new Position(0, 0), MockFrames.SingleThreaded0.Max(x => x.Position),
                                        new IndexOptions());
            sc.Mock.Verify(client =>
                           client.UpsertFrames(
                               It.Is <IEnumerable <Frame> >(frames => frames.SequenceEqual(MockFrames.SingleThreaded0))));
        }
예제 #5
0
        public void Set_Breakpoints_If_They_Are_Provided_In_The_Options()
        {
            // arrange
            var indexMethod  = new IndexMethod();
            var indexOptions = new IndexOptions
            {
                AccessBreakpoints = new[]
                {
                    AccessBreakpoint.Parse("r8:100"),
                    AccessBreakpoint.Parse("w8:200"),
                    AccessBreakpoint.Parse("rw4:300")
                },
                BreakpointMasks = new[]
                {
                    BreakpointMask.Parse("kernel32!createprocess*"),
                    BreakpointMask.Parse("user32!*"),
                    BreakpointMask.Parse("mycustommod!myfancyfunction")
                }
            };
            var builder = new BreakpointFacadeBuilder();

            indexMethod.BreakpointFacade = builder.Build();

            // act
            indexMethod.SetBreakpoints(indexOptions);

            // assert
            builder.Mock.Verify(proxy => proxy.SetBreakpointByMask("kernel32", "createprocess*"), Times.Once);
            builder.Mock.Verify(proxy => proxy.SetBreakpointByMask("user32", "*"), Times.Once);
            builder.Mock.Verify(proxy => proxy.SetBreakpointByMask("mycustommod", "myfancyfunction"), Times.Once);

            builder.Mock.Verify(proxy => proxy.SetReadAccessBreakpoint(0x8, 0x100), Times.Once);
            builder.Mock.Verify(proxy => proxy.SetReadAccessBreakpoint(0x4, 0x300), Times.Once);
            builder.Mock.Verify(proxy => proxy.SetWriteAccessBreakpoint(0x8, 0x200), Times.Once);
            builder.Mock.Verify(proxy => proxy.SetWriteAccessBreakpoint(0x4, 0x300), Times.Once);
        }