예제 #1
0
        /// <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);
        }
예제 #2
0
 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);
 }