Ejemplo n.º 1
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            var process = session.GetProcesses().First();

            if (process != _process)
            {
                _process = process;
                _reader  = new ProcessMemoryReader(process)
                {
                    NegateBreakpoints = true
                };
                _disassembler = new X86Disassembler(_reader);
            }

            if (arguments.Length > 0)
            {
                _reader.Position = long.Parse(arguments[0], NumberStyles.HexNumber);
            }

            int count = 5;

            if (arguments.Length > 1)
            {
                count = int.Parse(arguments[1]);
            }

            for (int i = 0; i < count; i++)
            {
                var instruction = _disassembler.ReadNextInstruction();
                _printer.PrintInstruction(instruction, process.GetSoftwareBreakpointByAddress((IntPtr)instruction.Offset));
            }
        }
Ejemplo n.º 2
0
 public void Execute(IDebuggerSession session, string[] arguments, Logger output)
 {
     foreach (var lib in session.GetProcesses().First().Libraries)
     {
         output.WriteLine("{0:X8}: {1}", lib.BaseOfLibrary.ToInt64(), (lib.Name ?? "<no name>"));
     }
 }
Ejemplo n.º 3
0
 public void Execute(IDebuggerSession session, string[] arguments, Logger output)
 {
     foreach (var process in session.GetProcesses())
     {
         process.Break();
     }
 }
Ejemplo n.º 4
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            if (arguments.Length < 2)
            {
                throw new ArgumentException("Not enough arguments.");
            }

            ulong address = ulong.Parse(arguments[1], NumberStyles.HexNumber, CultureInfo.InvariantCulture);

            var debuggeeProcess = session.GetProcesses().First();

            switch (arguments[0].ToLowerInvariant())
            {
            case "set":
                debuggeeProcess.SetSoftwareBreakpoint((IntPtr)address);
                break;

            case "remove":
                debuggeeProcess.RemoveSoftwareBreakpoint(
                    debuggeeProcess.GetSoftwareBreakpointByAddress((IntPtr)address));
                break;

            case "enable":
                debuggeeProcess.GetSoftwareBreakpointByAddress((IntPtr)address).Enabled = true;
                break;

            case "disable":
                debuggeeProcess.GetSoftwareBreakpointByAddress((IntPtr)address).Enabled = false;
                break;

            default:
                throw new ArgumentOutOfRangeException("Invalid switch " + arguments[1]);
            }
        }
Ejemplo n.º 5
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            output.WriteLine("Software Breakpoints:");
            foreach (var breakpoint in session.GetProcesses().SelectMany(x => x.GetSoftwareBreakpoints()))
            {
                output.WriteLine("- {0:X8} : {1}", breakpoint.Address.ToInt64(),
                                 breakpoint.Enabled ? "Enabled" : "Disabled");
            }

            output.WriteLine("Memory Breakpoints:");
            foreach (var breakpoint in session.GetProcesses().SelectMany(x => x.GetMemoryBreakpoints()))
            {
                output.WriteLine("- {0:X8} : {1}", breakpoint.Address.ToInt64(),
                                 breakpoint.Enabled ? "Enabled" : "Disabled");
            }
        }
Ejemplo n.º 6
0
 public void Execute(IDebuggerSession session, string[] arguments, Logger output)
 {
     foreach (var thread in session.GetProcesses().First().Threads)
     {
         output.WriteLine("{0}: {1:X8}", thread.Id, thread.StartAddress.ToInt64());
     }
 }
Ejemplo n.º 7
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            foreach (var process in session.GetProcesses())
            {
                process.Terminate();
            }

            session.StartProcess(new DebuggerProcessStartInfo
            {
                CommandLine = string.Join(" ", CommandLineArgs)
            });
        }
Ejemplo n.º 8
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            var process = session.GetProcesses().First();

            if (arguments.Length < 1)
            {
                throw new ArgumentException("Expected address.");
            }
            if (arguments.Length < 2)
            {
                throw new ArgumentException("Expected value size.");
            }
            if (arguments.Length < 3)
            {
                throw new ArgumentException("Expected at least one value to write.");
            }

            ulong address = ulong.Parse(arguments[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture);

            int size = 1;

            switch (arguments[1].ToLowerInvariant())
            {
            case "b":
                size = 1;
                break;

            case "w":
                size = 2;
                break;

            case "dw":
                size = 4;
                break;

            default:
                throw new ArgumentOutOfRangeException("Invalid switch " + arguments[1]);
            }

            var buffer = new byte[(arguments.Length - 2) * size];

            for (int i = 0; i < arguments.Length - 2; i++)
            {
                ulong currentValue = ulong.Parse(arguments[i + 2], NumberStyles.HexNumber, CultureInfo.InvariantCulture);
                var   bytes        = BitConverter.GetBytes(currentValue);
                Buffer.BlockCopy(bytes, 0, buffer, i * size, size);
            }

            process.WriteMemory((IntPtr)address, buffer, 0, buffer.Length);
        }
Ejemplo n.º 9
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            if (arguments.Length == 0)
            {
                throw new ArgumentException("Expected address.");
            }

            ulong address = ulong.Parse(arguments[0], NumberStyles.HexNumber, CultureInfo.InvariantCulture);

            var size = X86OperandSize.Byte;

            if (arguments.Length > 1)
            {
                switch (arguments[1].ToLowerInvariant())
                {
                case "b":
                    size = X86OperandSize.Byte;
                    break;

                case "w":
                    size = X86OperandSize.Word;
                    break;

                case "dw":
                    size = X86OperandSize.Dword;
                    break;

                default:
                    throw new ArgumentOutOfRangeException("Invalid switch " + arguments[1]);
                }
            }

            var process = session.GetProcesses().First();

            DumpMemory(process, address, 5, size, output);
        }