Esempio n. 1
0
        public Result Decode <Data, Result, Visitor> (LabeledSymbol <APC, TSymbolicValue> expr, Visitor visitor, Data data)
            where Visitor : ISymbolicExpressionVisitor <LabeledSymbol <APC, TSymbolicValue>, LabeledSymbol <APC, TSymbolicValue>, TSymbolicValue, Data, Result>
        {
            ExprDomain <TSymbolicValue> ifFound;

            if (!this.parent.PreStateLookup(expr.ReadAt, out ifFound) || ifFound.IsBottom)
            {
                return(visitor.SymbolicConstant(expr, expr.Symbol, data));
            }

            FlatDomain <Expr <TSymbolicValue> > aExpr = ifFound [expr.Symbol];

            if (aExpr.IsNormal)
            {
                return(aExpr.Concrete.Decode <Data, Result, ExpressionDecoderAdapter <TSymbolicValue, Data, Result, Visitor> >
                           (expr.ReadAt, expr.Symbol,
                           new ExpressionDecoderAdapter <TSymbolicValue, Data, Result, Visitor> (visitor), data));
            }

            TypeNode type;
            object   constant;

            if (this.parent.ValueLayer.ILDecoder.ContextProvider.ValueContext.IsConstant(expr.ReadAt, expr.Symbol, out type, out constant))
            {
                return(visitor.LoadConst(expr, type, constant, expr.Symbol, data));
            }

            return(visitor.SymbolicConstant(expr, expr.Symbol, data));
        }
            public string PrintAt(LabeledSymbol <APC, SymbolicValue> expr)
            {
                var sb = new StringBuilder();

                Recurse(sb, expr);
                return(sb.ToString());
            }
 public Dummy Binary(LabeledSymbol <APC, SymbolicValue> pc, BinaryOperator op, SymbolicValue dest, LabeledSymbol <APC, SymbolicValue> operand1, LabeledSymbol <APC, SymbolicValue> operand2,
                     StringBuilder data)
 {
     data.Append('(');
     Recurse(data, operand1);
     data.AppendFormat(" {0} ", op);
     Recurse(data, operand2);
     data.Append(')');
     return(Dummy.Value);
 }
 private void Recurse(StringBuilder sb, LabeledSymbol <APC, SymbolicValue> expr)
 {
     if (expr.Symbol.Equals(default(SymbolicValue)))
     {
         sb.Append("<!null!>");
     }
     else
     {
         this.context_provider.ExpressionContext.Decode <StringBuilder, Dummy, PrinterImpl <SymbolicValue> > (expr, this, sb);
     }
 }
 public Dummy Isinst(LabeledSymbol <APC, SymbolicValue> pc, TypeNode type, SymbolicValue dest, LabeledSymbol <APC, SymbolicValue> obj, StringBuilder data)
 {
     data.AppendFormat("IsInst({0}) ", this.method_driver.MetaDataProvider.FullName(type));
     Recurse(data, obj);
     return(Dummy.Value);
 }
 public Dummy SymbolicConstant(LabeledSymbol <APC, SymbolicValue> pc, SymbolicValue variable, StringBuilder data)
 {
     data.Append(variable.ToString());
     return(Dummy.Value);
 }
 public Dummy Unary(LabeledSymbol <APC, SymbolicValue> pc, UnaryOperator op, bool unsigned, SymbolicValue dest, LabeledSymbol <APC, SymbolicValue> source, StringBuilder data)
 {
     data.AppendFormat("{0} ", op.ToString());
     Recurse(data, source);
     return(Dummy.Value);
 }
 public Dummy Sizeof(LabeledSymbol <APC, SymbolicValue> pc, TypeNode type, SymbolicValue dest, StringBuilder data)
 {
     data.AppendFormat("sizeof({0})", this.method_driver.MetaDataProvider.FullName(type));
     return(Dummy.Value);
 }
 public Dummy LoadConst(LabeledSymbol <APC, SymbolicValue> pc, TypeNode type, object constant, SymbolicValue dest, StringBuilder data)
 {
     data.Append(constant.ToString());
     return(Dummy.Value);
 }
 public Dummy LoadNull(LabeledSymbol <APC, SymbolicValue> pc, SymbolicValue dest, StringBuilder polarity)
 {
     polarity.Append("NULL");
     return(Dummy.Value);
 }
Esempio n. 11
0
 public FlatDomain <TypeNode> GetType(LabeledSymbol <APC, TSymbolicValue> expr)
 {
     return(this.underlying.ValueContext.GetType(expr.ReadAt, expr.Symbol));
 }
Esempio n. 12
0
 public TSymbolicValue Unrefine(LabeledSymbol <APC, TSymbolicValue> expression)
 {
     return(expression.Symbol);
 }
Esempio n. 13
0
 public bool IsZero(LabeledSymbol <APC, TSymbolicValue> expression)
 {
     return(ValueContext.IsZero(expression.ReadAt, expression.Symbol));
 }
Esempio n. 14
0
 public APC GetPC(LabeledSymbol <APC, TSymbolicValue> pc)
 {
     return(pc.ReadAt);
 }