Exemple #1
0
        public void EnsureEvaluationContext(BlockFlow bf)
        {
            this.ctx = bf.SymbolicIn.Clone();
            var tes = new TrashedExpressionSimplifier(this, ctx);

            this.se = new SymbolicEvaluator(tes, ctx);
        }
 private void CreateSymbolicEvaluator(Frame frame)
 {
     ctx = new SymbolicEvaluationContext(arch, frame);
     se = new SymbolicEvaluator(ctx);
     if (esp == null)
         esp = Tmp32("esp");
     ctx.SetValue(esp, frame.FramePointer);
 }
Exemple #3
0
 private void CreateSymbolicEvaluator(Frame frame)
 {
     ctx = new SymbolicEvaluationContext(arch, frame);
     se  = new SymbolicEvaluator(ctx);
     if (esp == null)
     {
         esp = Tmp32("esp");
     }
     ctx.SetValue(esp, frame.FramePointer);
 }
        private void CreateEvaluationState(Block block)
        {
            this.ctx = new SymbolicEvaluationContext(
                block.Procedure.Architecture,
                block.Procedure.Frame);
            var tes = new TrashedExpressionSimplifier(
                this.program.SegmentMap, this, ctx);

            this.se = new SymbolicEvaluator(tes, ctx);
        }
Exemple #5
0
 private void CreateSymbolicEvaluator(Frame frame)
 {
     ctx = new SymbolicEvaluationContext(arch, frame);
     se  = new SymbolicEvaluator(
         new ExpressionSimplifier(segmentMap, ctx, listener),
         ctx);
     if (esp == null)
     {
         esp = Tmp32("esp");
     }
     ctx.SetValue(esp, frame.FramePointer);
 }
Exemple #6
0
        /// <summary>
        /// Generate inputs that exercise different program paths.
        /// </summary>
        /// <param name="function">The function.</param>
        /// <param name="precondition">A precondition.</param>
        /// <param name="input">The symbolic input.</param>
        /// <param name="backend">The backend to use.</param>
        /// <returns>A collection of inputs.</returns>
        public static IEnumerable <T1> GenerateInputs <T1, T2>(
            Func <Zen <T1>, Zen <T2> > function,
            Func <Zen <T1>, Zen <bool> > precondition,
            Zen <T1> input,
            Backend backend)
        {
            var expression = function(input).Simplify();
            var assume     = precondition(input).Simplify();

            (T2, PathConstraint) interpretFunction(T1 e)
            {
                var assignment = ModelCheckerFactory.CreateModelChecker(backend, null).ModelCheck(input == e);
                var evaluator  = new ExpressionEvaluator(true);
                var env        = new ExpressionEvaluatorEnvironment(assignment);

                return((T2)expression.Accept(evaluator, env), evaluator.PathConstraint);
            }

            Option <T1> findFunction(Zen <bool> e) => SymbolicEvaluator.Find(e, input, backend);

            return(GenerateInputsSage(assume, findFunction, interpretFunction));
        }
Exemple #7
0
 private Expression GetRegisterState(SymbolicEvaluator se, Identifier id)
 {
     return(ctx.RegisterState[(RegisterStorage)id.Storage]);
 }
Exemple #8
0
        /// <summary>
        /// Verify that if the function satisfies the precondition,
        /// then it also satisfies the postcondition.
        /// </summary>
        /// <param name="invariant">The invariant.</param>
        /// <param name="backend">The backend.</param>
        /// <returns>An input if one exists satisfying the constraints.</returns>
        public bool Assert(Func <Zen <T>, Zen <bool> > invariant = null, Backend backend = Backend.Z3)
        {
            var result = invariant(this.function());

            return(SymbolicEvaluator.Find(result, backend));
        }
 private Expression GetRegisterState(SymbolicEvaluator se, Identifier id)
 {
     return ctx.RegisterState[(RegisterStorage)id.Storage];
 }
Exemple #10
0
        /// <summary>
        /// Verify that if the function satisfies the precondition,
        /// then it also satisfies the postcondition.
        /// </summary>
        /// <param name="invariant">The invariant.</param>
        /// <param name="backend">The backend.</param>
        /// <returns>An input if one exists satisfying the constraints.</returns>
        public bool Assert(Func <Zen <T>, Zen <bool> > invariant, Backend backend = Backend.Z3)
        {
            var result = invariant(this.function());

            return(CommonUtilities.RunWithLargeStack(() => SymbolicEvaluator.Find(result, backend)));
        }