Example #1
0
        public ArmPrologueHelper(AccurateEngine aEngine)
        {
            iEngine = aEngine;

            // Make a new PC register, since we're going to manipulate it...
            iPC = new ArmRegister(aEngine.CPU.PC);

            // Create offsets
            iOffsetValues.AddDefaults();
            iOffsetValues.SetAll(uint.MaxValue);
        }
        protected override void HandleReadStarted()
        {
            try
            {
                base.Trace("[AccurateAlgorithm] HandleReadStarted() - START");

                // Indicate that we will throw an exception if we do not
                // find at least one accurate entry. This is the default behaviour
                // to ensure we don't result in stack data containing just ghost entries.
                // We toggle this to false if we abort stack walking due to an exception,
                // thereby preventing nested exception throwing.
                iAccurateEntryCheckRequired = true;

                // Create arm engine
                iArmEngine = new AccurateEngine(base.DebugEngineView, this, base.Manager.Engine);

                // Seed it with the registers
                iArmEngine.CPU.Registers = base.Engine.Registers;

                // Dump the registers in verbose mode
                base.Trace("STACK ENGINE REGISTERS:");
                foreach (ArmRegister reg in base.Engine.Registers)
                {
                    string symbol = base.DebugEngineView.Symbols.PlainText[reg.Value];
                    base.Trace(reg.ToString() + " " + symbol);
                }
                //
                base.Trace(System.Environment.NewLine);
                base.Trace("[AccurateAlgorithm] HandleReadStarted() - setup complete.");
            }
            finally
            {
                base.HandleReadStarted();
            }

            base.Trace("[AccurateAlgorithm] HandleReadStarted() - END");
        }