/// <summary> /// Before processing the body of a procedure, perform housekeeping tasks. /// </summary> /// <param name="addr"></param> /// <param name="state"></param> /// <param name="proc"></param> /// <returns></returns> private void EstablishInitialState(Address addr, ProcessorState st, Procedure proc) { st.SetInstructionPointer(addr); st.OnProcedureEntered(); var sp = proc.Frame.EnsureRegister(Program.Architecture.StackRegister); st.SetValue((Identifier)sp, (Expression)proc.Frame.FramePointer); SetAssumedRegisterValues(addr, st); }
private bool ProcessRtlCluster(RtlInstructionCluster ric) { if (ric.Address.ToLinear() == 0x30C) //$DEBUG { ric.Address.ToString(); } state.SetInstructionPointer(ric.Address); SetAssumedRegisterValues(ric.Address); foreach (var rtlInstr in ric.Instructions) { ri = rtlInstr; if (!ri.Accept(this)) { return(false); } } return(true); }