Exemplo n.º 1
0
            public IEnumerable <KeyValuePair <string, ulong> > GetSavedRegisters()
            {
                var layout = _Provider.GetThreadLayout(_Evaluator);

                var sp = _Evaluator.EvaluateIntegralExpression(GetFieldExpression("sp")) ?? 0;
                var lr = _Evaluator.EvaluateIntegralExpression(GetFieldExpression("stack_frame")) ?? 0;

                if (sp == 0 || lr == 0)
                {
                    return(new KeyValuePair <string, ulong> [0]);
                }

                StackLayoutBuilder builder = new StackLayoutBuilder();

                builder.AddRegisters("r", 4, 11);
                if ((lr & 0x10) == 0)
                {
                    builder.AddRegisters("s", 16, 31);
                }

                builder.AddRegisters("r", 0, 3);
                builder.AddRegisters("r12", "lr", "pc");

                builder.Skip(4);
                return(builder.FetchValues(sp, _Evaluator));
            }
Exemplo n.º 2
0
        public IEnumerable <KeyValuePair <string, ulong> > GetSaved64BitRegisters()
        {
            StackLayoutBuilder builder = new StackLayoutBuilder(8);

            var tmpBlock = _Evaluator.ReadMemoryBlock($"0x{_SavedSP:x8}", 16);

            builder.Skip(16);

            if (BitConverter.ToUInt64(tmpBlock, 0) != 0)
            {
                builder.AddZigZagRegisterSequence("q", 31, 0);
            }

            builder.AddSingleRegister("pc");
            builder.Skip();
            builder.AddZigZagRegisterSequence("x", 31, 0);
            builder.VerifyPosition(0x120);
            return(builder.FetchValues(_SavedSP, _Evaluator));
        }