private static void FillTestData()
			{
				var p = new Program()
				{
					ProgramID = Programs.Count + 1,
					ProgramName = "Scary Lesson"
				};
				var pl = new ProgramLocation()
				{
					ProgramLocationID = ProgramLocations.Count + 1,
					ProgramID = p.ProgramID,
					ProgramLocationName = "Haunted House"
				};
				Programs.Add(p);
				ProgramLocations.Add(pl);
				p = new Program()
				{
					ProgramID = Programs.Count + 1,
					ProgramName = "Terrifying Teachings"
				};
				pl = new ProgramLocation()
				{
					ProgramLocationID = ProgramLocations.Count + 1,
					ProgramID = p.ProgramID,
					ProgramLocationName = "Mystical Mansion"
				};
				Programs.Add(p);
				ProgramLocations.Add(pl);
				p = new Program()
				{
					ProgramID = Programs.Count + 1,
					ProgramName = "Unassociated Program"
				};
				Programs.Add(p);
			}
Example #2
0
        private HorizonClient CreateHorizonClientImpl(ProgramLocation location, ReadOnlySpan <byte> accessControlData,
                                                      ReadOnlySpan <byte> accessControlDescriptor)
        {
            HorizonClient client = CreateHorizonClient();

            LoaderClient.Fs.RegisterProgram(client.ProcessId.Value, location.ProgramId, location.StorageId,
                                            accessControlData, accessControlDescriptor).ThrowIfFailure();

            return(client);
        }
Example #3
0
        internal ProgramInformation(string programFolder, ProgramLocation location)
        {
            Path            = programFolder;
            ProgramLocation = location;
            Name            = new DirectoryInfo(programFolder).Name;
            IEnumerable <string> files = Directory.EnumerateFiles(programFolder);

            DllFiles = files.Where(s => s.EndsWith(".dll")).ToList();
            ExeFile  = System.IO.Path.Combine(programFolder, files.First(f => f.EndsWith("exe")));
        }
		internal ProgramInformation (string programFolder, ProgramLocation location)
		{
			Name = programFolder; 
			ProgramLocation = location;
			Path =  new DirectoryInfo(programFolder).Name;
			IEnumerable<string> files = Directory.EnumerateFiles (programFolder);
			DllFiles = files.Where(s => s.EndsWith(".dll")).ToList();
			ExeFile = System.IO.Path.Combine(programFolder, files.First(f => f.EndsWith("exe")));  

		}
Example #5
0
        public void RemoveNoConstraintsBasedOnVars()
        {
            IConstraintManager CM      = new ConstraintManager();
            IExprBuilder       builder = GetBuilder();

            // Dummy Boogie variable
            var bv8TypeIdent = new TypedIdent(Token.NoToken, "bv8", Microsoft.Boogie.Type.GetBvType(8));
            var dummyVarBv   = new GlobalVariable(Token.NoToken, bv8TypeIdent);

            // dummyVar needs a programLocation, otherwise SymbolicVariable constructor raises an exception
            var progLoc = new ProgramLocation(dummyVarBv);

            dummyVarBv.SetMetadata <ProgramLocation>((int)Symbooglix.Annotation.AnnotationIndex.PROGRAM_LOCATION, progLoc);

            var s0 = new SymbolicVariable("s0", dummyVarBv).Expr;
            var s1 = new SymbolicVariable("s1", dummyVarBv).Expr;
            var s2 = new SymbolicVariable("s2", dummyVarBv).Expr;

            // Construct some constraints
            Expr c0 = builder.Eq(builder.BVAND(s0, s1), builder.ConstantBV(0, 8));
            Expr c1 = builder.Eq(s2, builder.ConstantBV(1, 8));

            CM.AddConstraint(c0, progLoc);
            CM.AddConstraint(c1, progLoc);

            var mockSolver      = new MockSolver();
            var indepenceSolver = new Symbooglix.Solver.ConstraintIndependenceSolver(mockSolver);

            Expr queryExpr = builder.Eq(builder.BVAND(s1, s2), builder.ConstantBV(0, 8));

            indepenceSolver.ComputeSatisfiability(new Solver.Query(CM, new Constraint(queryExpr)));

            // Check no constraints were removed
            Assert.AreEqual(2, mockSolver.Constraints.Count);
            Assert.AreSame(queryExpr, mockSolver.QueryExpr);

            bool c0Found = false;
            bool c1Found = false;

            foreach (var constraint in mockSolver.Constraints)
            {
                if (c0 == constraint.Condition)
                {
                    c0Found = true;
                }

                if (c1 == constraint.Condition)
                {
                    c1Found = true;
                }
            }

            Assert.IsTrue(c0Found);
            Assert.IsTrue(c1Found);
        }
Example #6
0
        public HorizonClient CreateHorizonClient(ProgramLocation location, AccessControlBits.Bits fsPermissions)
        {
            var descriptor = new AccessControlDescriptor();
            var dataHeader = new AccessControlDataHeader();

            descriptor.Version = 1;
            dataHeader.Version = 1;

            descriptor.AccessFlags = (ulong)fsPermissions;
            dataHeader.AccessFlags = (ulong)fsPermissions;

            return(CreateHorizonClientImpl(location, SpanHelpers.AsReadOnlyByteSpan(in dataHeader),
                                           SpanHelpers.AsReadOnlyByteSpan(in descriptor)));
        }
Example #7
0
        private void UpdateProgramList()
        {
            var media = new string[] { ProgramPathEV3 };

            programList = new List <ProgramInformation> ();
            foreach (var mediaPath in media)
            {
                IEnumerable <string> programsFolders = Directory.EnumerateDirectories(mediaPath);
                foreach (var programFolder in programsFolders)
                {
                    ProgramLocation location = ProgramLocation.ProgramFolder;
                    programList.Add(new ProgramInformation(programFolder, location));
                }
            }
        }
Example #8
0
        SymbolicVariable GetVar(string name)
        {
            // FIXME: THIS IS A HACK!

            // Dummy Boogie variable
            var IntTypeIdent = new TypedIdent(Token.NoToken, name, Microsoft.Boogie.Type.Int);
            var dummyVarBv   = new GlobalVariable(Token.NoToken, IntTypeIdent);

            // dummyVar needs a programLocation, otherwise SymbolicVariable constructor raises an exception
            var progLoc = new ProgramLocation(dummyVarBv);

            dummyVarBv.SetMetadata <ProgramLocation>((int)Symbooglix.Annotation.AnnotationIndex.PROGRAM_LOCATION, progLoc);

            return(new SymbolicVariable(name, dummyVarBv));
        }
Example #9
0
		private string LocationToString (ProgramLocation location)
		{
			string s = "";
			switch (location) 
			{
				case MonoBrickFirmware.FileSystem.ProgramLocation.ProgramFolder:
					s = "Program folder";
					break;
				case MonoBrickFirmware.FileSystem.ProgramLocation.SDCard:
					s = "SD card";
					break;
				case MonoBrickFirmware.FileSystem.ProgramLocation.Custom:
					s = "Custom";
					break;
			}
			return s;

		}
Example #10
0
        private string LocationToString(ProgramLocation location)
        {
            string s = "";

            switch (location)
            {
            case MonoBrickFirmware.FileSystem.ProgramLocation.ProgramFolder:
                s = "Program folder";
                break;

            case MonoBrickFirmware.FileSystem.ProgramLocation.SDCard:
                s = "SD card";
                break;

            case MonoBrickFirmware.FileSystem.ProgramLocation.Custom:
                s = "Custom";
                break;
            }
            return(s);
        }
Example #11
0
 public HorizonClient CreateHorizonClient(ProgramLocation location, ReadOnlySpan <byte> fsAccessControlData,
                                          ReadOnlySpan <byte> fsAccessControlDescriptor)
 {
     return(CreateHorizonClientImpl(location, fsAccessControlData, fsAccessControlDescriptor));
 }
Example #12
0
 private void CheckIsNotNullAndString(ProgramLocation pl)
 {
     Assert.IsNotNull(pl);
     Assert.IsNotNullOrEmpty(pl.ToString());
 }
Example #13
0
        public void RemoveOneConstraintBasedOnVarsAndFunctions()
        {
            IConstraintManager CM = new ConstraintManager();
            var builder           = GetBuilder();

            // Dummy Boogie variable
            var bv8Type      = Microsoft.Boogie.Type.GetBvType(8);
            var bv8TypeIdent = new TypedIdent(Token.NoToken, "bv8", bv8Type);
            var dummyVarBv   = new GlobalVariable(Token.NoToken, bv8TypeIdent);

            // dummyVar needs a programLocation, otherwise SymbolicVariable constructor raises an exception
            var progLoc = new ProgramLocation(dummyVarBv);

            dummyVarBv.SetMetadata <ProgramLocation>((int)Symbooglix.Annotation.AnnotationIndex.PROGRAM_LOCATION, progLoc);

            var s0 = new SymbolicVariable("s0", dummyVarBv).Expr;
            var s1 = new SymbolicVariable("s1", dummyVarBv).Expr;
            var s2 = new SymbolicVariable("s2", dummyVarBv).Expr;

            // Construct some constraints
            Expr c0 = builder.Eq(builder.BVAND(s0, s1), builder.ConstantBV(0, 8));
            Expr c1 = builder.Eq(s2, builder.ConstantBV(1, 8));

            var FCB        = new FunctionCallBuilder();
            var foobarFunc = FCB.CreateUninterpretedFunctionCall("foobar", bv8Type, new List <Microsoft.Boogie.Type>()
            {
                bv8Type
            });
            // foobar(0bv8) == 0bv8
            Expr c2 = builder.Eq(builder.UFC(foobarFunc, builder.ConstantBV(0, 8)), builder.ConstantBV(0, 8));

            CM.AddConstraint(c0, progLoc);
            CM.AddConstraint(c1, progLoc);
            CM.AddConstraint(c2, progLoc);

            var mockSolver      = new MockSolver();
            var indepenceSolver = new Symbooglix.Solver.ConstraintIndependenceSolver(mockSolver);

            // The query expression does not use the "foobar" function so we don't need to keep constraints on that function
            Expr queryExpr = builder.Eq(builder.BVAND(s1, s2), builder.ConstantBV(0, 8));


            indepenceSolver.ComputeSatisfiability(new Solver.Query(CM, new Constraint(queryExpr)));

            // Check no constraints were removed
            Assert.AreEqual(2, mockSolver.Constraints.Count);
            Assert.AreSame(queryExpr, mockSolver.QueryExpr);

            bool c0Found = false;
            bool c1Found = false;

            foreach (var constraint in mockSolver.Constraints)
            {
                if (c0 == constraint.Condition)
                {
                    c0Found = true;
                }

                if (c1 == constraint.Condition)
                {
                    c1Found = true;
                }
            }

            Assert.IsTrue(c0Found);
            Assert.IsTrue(c1Found);
        }