Exemple #1
0
        public ExploitationPrimitive(
            ExploitationPrimitiveType primitiveType,
            string symbol,
            string name
            )
        {
            this.PrimitiveType = primitiveType;
            this.Symbol        = symbol;
            this.Name          = name;

            this.ConstraintList = new List <Expression <Func <SimulationContext, bool> > >();
        }
Exemple #2
0
        public ReadPrimitive(
            ExploitationPrimitiveType primitiveType,
            string name,
            MemoryAddress readAddress = null,
            Expression <Func <SimulationContext, bool> > constraints = null,
            GetNextViolationDelegate nextViolation       = null,
            PrimitiveTransitionSuccessDelegate onSuccess = null
            )
            : base(primitiveType, "read", name)
        {
            this.ReadAddress = readAddress;

            this.ConstraintList.Add(
                (context) =>
                (
                    //
                    // This must be a memory read, from a source address whose state is initialized and equal
                    // to the specified read address, and whose content can actually be read.
                    //

                    (context.CurrentViolation.Method == MemoryAccessMethod.Read)

                    &&

                    (
                        (context.Global.AssumeContentInitializationPossible == true)

                        ||

                        (this.ReadAddress.IsImplicitlyInitialized)

                        ||

                        (context.CurrentViolation.ContentSrcState == MemoryAccessParameterState.Controlled)

                        ||

                        (context.CurrentViolation.ContentSrcState == MemoryAccessParameterState.Fixed)
                    )

                    &&

                    (context.AttackerFavorsEqual(context.CurrentViolation.Address, this.ReadAddress) == true)

                    &&

                    (context.CanReadMemoryAtAddress(this.ReadAddress) == true)
                )
                );

            Update(constraints, nextViolation, onSuccess);
        }