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> > >(); }
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); }