Esempio n. 1
0
 public static ILPrinter <Label> Create <Label, Source, Dest, Context, EdgeData>
     (IILDecoder <Label, Source, Dest, Context, EdgeData> ilDecoder,
     IMetaDataProvider metaDataProvider,
     Func <Source, string> sourceToString, Func <Dest, string> destToString)
 {
     return(new Printer <Label, Source, Dest, Context, EdgeData> (ilDecoder, metaDataProvider, sourceToString, destToString).PrintCodeAt);
 }
Esempio n. 2
0
        public static ForwardAnalysis <AbstractState, EdgeData> Make <Source, Dest, Context> (
            IILDecoder <APC, Source, Dest, Context, EdgeData> decoder,
            IAnalysis <APC, AbstractState, IILVisitor <APC, Source, Dest, AbstractState, AbstractState>, EdgeData> analysis)
            where Context : IMethodContextProvider
        {
            IILVisitor <APC, Source, Dest, AbstractState, AbstractState> visitor = analysis.GetVisitor();
            var forwardAnalysisSolver = new ForwardAnalysis <AbstractState, EdgeData> (
                decoder.ContextProvider.MethodContext.CFG,
                (pc, state) => decoder.ForwardDecode <AbstractState, AbstractState, IILVisitor <APC, Source, Dest, AbstractState, AbstractState> > (pc, visitor, state),
                analysis.Join,
                analysis.ImmutableVersion,
                analysis.MutableVersion,
                analysis.EdgeConversion,
                decoder.EdgeData,
                (pc, state) => {
                if (!decoder.IsUnreachable(pc))
                {
                    return(analysis.IsBottom(pc, state));
                }

                return(true);
            },
                analysis.Dump
                );

            analysis.SaveFixPointInfo(forwardAnalysisSolver);
            return(forwardAnalysisSolver);
        }
Esempio n. 3
0
 public ExpressionDecoder(IILDecoder <APC, TSymbolicValue, TSymbolicValue, IValueContextProvider <TSymbolicValue>, TEdgeData> valueDecoder,
                          ExpressionAnalysisFacade <TSymbolicValue, TContext, TEdgeData> parent)
 {
     this.value_decoder = valueDecoder;
     this.parent        = parent;
     this.underlying    = valueDecoder.ContextProvider;
 }
Esempio n. 4
0
 public Printer(IILDecoder <Label, Source, Dest, Context, EdgeData> ilDecoder, IMetaDataProvider metaDataProvider,
                Func <Source, string> sourceToString, Func <Dest, string> destToString)
 {
     this.il_decoder         = ilDecoder;
     this.meta_data_provider = metaDataProvider;
     this.source_to_string   = sourceToString;
     this.dest_to_string     = destToString;
 }
Esempio n. 5
0
 Create <Expression, Variable, ContextData, EdgeConversionData> (
     IILDecoder <APC, Expression, Variable, ContextData, EdgeConversionData> ilDecoder,
     IMetaDataProvider metadataDecoder,
     IContractProvider contractDecoder, Func <Expression, string> expressionToString, Func <Variable, string> variableToString, ILPrinter <APC> printer)
     where ContextData : IMethodContextProvider
 {
     return(new CodeLayer <Expression, Variable, ContextData, EdgeConversionData>
                (ilDecoder, metadataDecoder, contractDecoder, expressionToString, variableToString, printer));
 }
Esempio n. 6
0
 public CodeLayer(IILDecoder <APC, Expression, Variable, ContextData, EdgeData> ilDecoder,
                  IMetaDataProvider metadataDecoder,
                  IContractProvider contractDecoder,
                  Func <Expression, string> expressionToString,
                  Func <Variable, string> variableToString, ILPrinter <APC> printer)
     : this(ilDecoder, metadataDecoder, contractDecoder, expressionToString, variableToString)
 {
     this.printer = new Lazy <ILPrinter <APC> > (() => printer);
 }
Esempio n. 7
0
        public CodeLayer(IILDecoder <APC, Expression, Variable, ContextData, EdgeData> ilDecoder,
                         IMetaDataProvider metadataDecoder,
                         IContractProvider contractDecoder,
                         Func <Expression, string> expressionToString,
                         Func <Variable, string> variableToString)
        {
            ExpressionToString = expressionToString;
            VariableToString   = variableToString;
            ILDecoder          = ilDecoder;
            MetaDataProvider   = metadataDecoder;
            ContractProvider   = contractDecoder;

            this.printer = new Lazy <ILPrinter <APC> > (() => PrinterFactory.Create(ILDecoder, MetaDataProvider, ExpressionToString, VariableToString));
        }
            public void RunHeapAndExpressionAnalyses()
            {
                if (this.heap_analysis != null)
                {
                    return;
                }

                this.heap_analysis = new HeapAnalysis.HeapAnalysis(StackLayer);
                StackLayer.CreateForward(this.heap_analysis) (this.heap_analysis.InitialValue());

                ValueLayer = CodeLayerFactory.Create(
                    this.heap_analysis.GetDecoder(StackLayer.ILDecoder), StackLayer.MetaDataProvider, StackLayer.ContractProvider,
                    source => source.ToString(), dest => dest.ToString());
                var expressionAnalysis = new ExpressionAnalysisFacade <SymbolicValue, IValueContextProvider <SymbolicValue>, IImmutableMap <SymbolicValue, LispList <SymbolicValue> > >
                                             (ValueLayer, this.heap_analysis.IsUnreachable);

                ValueLayer.CreateForward(expressionAnalysis.CreateExpressionAnalysis()) (expressionAnalysis.InitialValue(SymbolicValue.GetUniqueKey));

                if (DebugOptions.Debug)
                {
                    Console.WriteLine("------------Value based CFG-----------------");
                    ValueLayer.ILDecoder.ContextProvider.MethodContext.CFG.Print(Console.Out, ValueLayer.Printer, null, null);
                }

                IILDecoder
                <APC, LabeledSymbol <APC, SymbolicValue>, SymbolicValue, IExpressionContextProvider <LabeledSymbol <APC, SymbolicValue>, SymbolicValue>, IImmutableMap <SymbolicValue, LispList <SymbolicValue> > >
                decoder = expressionAnalysis.GetDecoder(ValueLayer.ILDecoder);

                this.expr2String = ExpressionPrinterFactory.Printer(decoder.ContextProvider, this);
                ExpressionLayer  = CodeLayerFactory.Create(decoder, ValueLayer.MetaDataProvider, ValueLayer.ContractProvider,
                                                           this.expr2String, ValueLayer.VariableToString);

                if (DebugOptions.Debug)
                {
                    Console.WriteLine("------------Expression based CFG-------------");
                    ExpressionLayer.ILDecoder.ContextProvider.MethodContext.CFG.Print(Console.Out, ExpressionLayer.Printer, null, null);
                }

                HybridLayer = CodeLayerFactory.Create(ValueLayer.ILDecoder, ValueLayer.MetaDataProvider, ValueLayer.ContractProvider,
                                                      ValueLayer.ExpressionToString,
                                                      ValueLayer.VariableToString, ExpressionLayer.Printer);
            }
Esempio n. 9
0
 public StackDepthProvider(IILDecoder <APC, Dummy, Dummy, TContext, Dummy> ilDecoder,
                           IMetaDataProvider metaDataProvider)
 {
     this.il_decoder  = ilDecoder;
     MetaDataProvider = metaDataProvider;
 }
Esempio n. 10
0
 GetDecoder(
     IILDecoder <APC, TSymValue, TSymValue, IValueContextProvider <TSymValue>, TEdgeData> ilDecoder)
 {
     return(new ExpressionDecoder <TSymValue, TContext, TEdgeData> (ilDecoder, this));
 }
Esempio n. 11
0
 GetDecoder <Context>(IILDecoder <APC, int, int, Context, Dummy> underlying)
     where Context : IStackContextProvider
 {
     return(new ValueDecoder <Context> (this, underlying));
 }
Esempio n. 12
0
 public ValueDecoder(HeapAnalysis parent, IILDecoder <APC, int, int, TContext, Dummy> stackDecoder)
 {
     this.context       = new Lazy <IValueContextProvider <SymbolicValue> > (() => new ValueContextProvider <TContext>(this.parent, this.stack_decoder.ContextProvider));
     this.parent        = parent;
     this.stack_decoder = stackDecoder;
 }
Esempio n. 13
0
 public static IILDecoder <APC, int, int, IStackContextProvider, Dummy> Create <TContext> (IILDecoder <APC, Dummy, Dummy, TContext, Dummy> ilDecoder,
                                                                                           IMetaDataProvider metadataDecoder) where TContext : IMethodContextProvider
 {
     return(new StackDepthProvider <TContext> (ilDecoder, metadataDecoder));
 }