Exemple #1
0
        public void Allow_For_Single_Stepping()
        {
            var controlMock        = new Mock <IDebugControl6>();
            var clientMock         = new Mock <IDebugClient5>();
            var registersMock      = new Mock <IDebugRegisters2>();
            var systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var executeWrapperMock = new Mock <IExecuteWrapper>();

            controlMock.Setup(control => control.SetExecutionStatus(It.IsAny <DEBUG_STATUS>()));

            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.StepInto();
            controlMock.Verify(control => control.SetExecutionStatus(DEBUG_STATUS.STEP_INTO), Times.Once);
        }
Exemple #2
0
        public void Write_Text_To_The_Screen()
        {
            var controlMock        = new Mock <IDebugControl6>();
            var clientMock         = new Mock <IDebugClient5>();
            var registersMock      = new Mock <IDebugRegisters2>();
            var systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var executeWrapperMock = new Mock <IExecuteWrapper>();

            controlMock.Setup(control =>
                              control.ControlledOutput(DEBUG_OUTCTL.ALL_CLIENTS, DEBUG_OUTPUT.NORMAL, It.IsAny <string>()));

            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.WriteLine("hi");
            controlMock.Verify(control => control.ControlledOutput(DEBUG_OUTCTL.ALL_CLIENTS, DEBUG_OUTPUT.NORMAL, "hi\n"), Times.Once);
        }
Exemple #3
0
        public void Read_Virtual_Memory()
        {
            var controlMock        = new Mock <IDebugControl6>();
            var clientMock         = new Mock <IDebugClient5>();
            var registersMock      = new Mock <IDebugRegisters2>();
            var systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var executeWrapperMock = new Mock <IExecuteWrapper>();
            var memoryEngineMock   = new Mock <IMemoryEngine>();

            memoryEngineMock
            .Setup(engine => engine.ReadMemory(It.IsAny <ulong>(), It.IsAny <ulong>(), It.IsAny <IDebugDataSpaces>()))
            .Returns(new byte[] { 0x00, 0x11 });

            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.MemoryEngine = memoryEngineMock.Object;
            eng.ReadVirtualMemory(new MemoryRange(0, 1));
            memoryEngineMock.Verify(engine => engine.ReadMemory(0, 1, dataSpacesMock.Object), Times.Once);
        }
Exemple #4
0
        public void Get_Register_Values()
        {
            var controlMock        = new Mock <IDebugControl6>();
            var clientMock         = new Mock <IDebugClient5>();
            var registersMock      = new Mock <IDebugRegisters2>();
            var systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var executeWrapperMock = new Mock <IExecuteWrapper>();
            var registerEngineMock = new Mock <IRegisterEngine>();

            registerEngineMock.Setup(engine => engine.GetRegisterValue(It.IsAny <int>(), It.IsAny <Register>(),
                                                                       It.IsAny <IDebugRegisters2>(), It.IsAny <IDebugEngineProxy>())).Returns(new byte[] { 0x00 });
            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.RegisterEngine = registerEngineMock.Object;
            eng.GetRegisterValue(1, Register.Af).SequenceEqual(new byte[] { 0x00 }).Should().BeTrue();
        }
Exemple #5
0
        public void Execute_Commands_And_Return_Output()
        {
            var controlMock        = new Mock <IDebugControl6>();
            var clientMock         = new Mock <IDebugClient5>();
            var registersMock      = new Mock <IDebugRegisters2>();
            var systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var executeWrapperMock = new Mock <IExecuteWrapper>();

            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.Execute("!peb").Should().Be(Value);
        }
Exemple #6
0
        public void Be_Able_To_Continue_Execution_Until_A_Break_Occurs()
        {
            var controlMock        = new Mock <IDebugControl6>();
            var clientMock         = new Mock <IDebugClient5>();
            var registersMock      = new Mock <IDebugRegisters2>();
            var systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var executeWrapperMock = new Mock <IExecuteWrapper>();

            DEBUG_STATUS status = DEBUG_STATUS.GO;
            int          i      = 0;

            controlMock.Setup(control => control.GetExecutionStatus(out status)).Callback(() =>
            {
                DEBUG_STATUS status2 = DEBUG_STATUS.BREAK;
                if (i > 0)
                {
                    controlMock.Setup(control => control.GetExecutionStatus(out status2));
                }
                i++;
            });


            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.RunUntilBreak();

            controlMock.Verify(control => control.GetExecutionStatus(out status), Times.Exactly(3));
        }
Exemple #7
0
        public void Switch_To_A_Specified_Thread()
        {
            var          controlMock        = new Mock <IDebugControl6>();
            var          clientMock         = new Mock <IDebugClient5>();
            var          registersMock      = new Mock <IDebugRegisters2>();
            var          systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var          dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var          executeWrapperMock = new Mock <IExecuteWrapper>();
            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            systemObjectsMock.Setup(objects => objects.SetCurrentThreadId(It.IsAny <uint>()));
            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.SwitchToThread(1);
            systemObjectsMock.Verify(objects => objects.SetCurrentThreadId(1), Times.Once);
        }
Exemple #8
0
        public void Get_The_Current_Thread_Id()
        {
            var          controlMock        = new Mock <IDebugControl6>();
            var          clientMock         = new Mock <IDebugClient5>();
            var          registersMock      = new Mock <IDebugRegisters2>();
            var          systemObjectsMock  = new Mock <IDebugSystemObjects>();
            var          dataSpacesMock     = new Mock <IDebugDataSpaces>();
            var          executeWrapperMock = new Mock <IExecuteWrapper>();
            const string Value = @"PEB at 00000041e9154000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No";

            executeWrapperMock.Setup(wrapper => wrapper.Execute(It.IsAny <string>())).Returns(Value);

            uint val = 1;

            systemObjectsMock.Setup(objects => objects.GetCurrentThreadId(out val));
            var eng = new DebugEngineProxy(controlMock.Object, clientMock.Object, registersMock.Object,
                                           systemObjectsMock.Object,
                                           dataSpacesMock.Object, executeWrapperMock.Object);

            eng.GetCurrentThreadId().Should().Be(1);
        }
        /// <summary>
        ///     Displays the specified object.
        /// </summary>
        /// <param name="obj">The object.</param>
        /// <inheritdoc />
        public void Display(object obj)
        {
            var json = JsonConvert.SerializeObject(obj, Formatting.Indented);

            DebugEngineProxy.WriteLine(json);
        }