Exemplo n.º 1
0
        public void Execute(IDebuggerSession session, string[] arguments, Logger output)
        {
            var threadContext = _currentThread.GetThreadContext();

            if (arguments.Length == 0)
            {
                DumpRegisters(threadContext, output);
            }
            else if (arguments.Length > 0)
            {
                var register = threadContext.GetRegisterByName(arguments[0]);

                if (arguments.Length < 2)
                {
                    DumpRegister(register, output);
                }
                else
                {
                    string newValue = arguments[1];

                    switch (register.Size)
                    {
                    case 1:
                        register.Value = newValue == "1";
                        break;

                    case 8:
                        register.Value = byte.Parse(newValue, NumberStyles.HexNumber);
                        break;

                    case 16:
                        register.Value = ushort.Parse(newValue, NumberStyles.HexNumber);
                        break;

                    case 32:
                        register.Value = uint.Parse(newValue, NumberStyles.HexNumber);
                        break;

                    case 64:
                        register.Value = ulong.Parse(newValue, NumberStyles.HexNumber);
                        break;

                    default:
                        throw new NotSupportedException($"Invalid or unsupported register size {register.Size}.");
                    }
                    threadContext.Flush();
                }
            }
        }
Exemplo n.º 2
0
        private void SessionOnPaused(object sender, DebuggeeThreadEventArgs args)
        {
            _currentThread = args.Thread;
            var threadContext = _currentThread.GetThreadContext();

            if (!_justStepped)
            {
                _logger.WriteLine("Debuggee paused.");
                _logger.WriteLine("Thread ID: " + args.Thread.Id);

                var registerCommand = _executor.GetCommand <RegisterCommand>();
                registerCommand.SetCurrentThread(_currentThread);
                registerCommand.Execute(_session, new string[0], _logger);
            }

            uint eip = (uint)threadContext.GetRegisterByName("eip").Value;

            _executor.GetCommand <DisassembleCommand>().Execute(_session, new[] { eip.ToString("X8"), "1" }, _logger);

            _justStepped = false;
        }