Beispiel #1
0
 protected override void BeforeRun()
 {
     FGMSECInstructionSet.Install();
     Sys.PS2Support.Global.InitPS2Port();
     X = Sys.MouseManager.X;
     Y = Sys.MouseManager.Y;
     Console.Clear();
     Console.WriteLine("[TestEnvOS 0.1.2 AerOSTeam] - PS2SupportVersion & Usermanager implementation");
 }
Beispiel #2
0
        Executable ConstructExecutable(byte[] data, params string[] parameters)
        {
            FGMSECInstructionSet set = new FGMSECInstructionSet();
            Executable           exec;

            exec = new Executable(data, set, 3);
            exec.ReadData();
            if (parameters.Length > 0)
            {
                int addr = exec.Memory.Data.Count;
                for (int i = 0; i < parameters.Length; i++)
                {
                    foreach (char c in parameters[i])
                    {
                        exec.Memory.AddChar(c);
                    }
                    exec.Memory.AddChar(0);
                }
                exec.Memory.Stack.Push(addr);
                exec.Memory.Stack.Push(parameters.Length - 1);
            }
            exec.AddSystemCall((Executable caller) =>
            {
                int addr = (int)((FGMSECInstructionSet)caller.usingInstructionSet).CPU.GetRegData(3);
                char c   = (char)caller.Memory.ReadChar(addr);

                while (c != 0)
                {
                    Console.Write(c);
                    addr++;
                    c = (char)caller.Memory.ReadChar(addr);
                }
            });
            exec.AddSystemCall((Executable caller) =>
            {
                string input = Console.ReadLine();
                input       += '\0';
                int addr     = caller.Memory.Data.Count;
                int caddr    = 0;
                for (int i = 0; i < input.Length; i++)
                {
                    char c = input[i];
                    if (!caller.Memory.AddChar(c))
                    {
                        caller.Memory.WriteChar(caddr, c);
                        addr = 0;
                        caddr++;
                    }
                }
                ((FGMSECInstructionSet)caller.usingInstructionSet).CPU.SetRegData(3, (uint)addr);
            });
            exec.AddSystemCall((Executable caller) =>
            {
                Console.Clear();
            });
            exec.AddSystemCall((Executable caller) =>
            {
                if (caller.RunningUser.privLevel != services.Usermanager.privilege.User)
                {
                    ((FGMSECInstructionSet)caller.usingInstructionSet).CPU.SetRegData(3, 1);
                    return;
                }
                if (PrivilElev(caller.RunningUser.username))
                {
                    caller.RunningUser = new services.Usermanager.User()
                    {
                        username = "******", privLevel = services.Usermanager.privilege.Privileged
                    };
                    ((FGMSECInstructionSet)caller.usingInstructionSet).CPU.SetRegData(3, 1);
                }
                else
                {
                    ((FGMSECInstructionSet)caller.usingInstructionSet).CPU.SetRegData(3, 0);
                }
            });
            exec.AddSystemCall((Executable caller) =>
            {
                var username = caller.RunningUser.username;
                int addr     = caller.Memory.Data.Count;
                foreach (char c in username)
                {
                    caller.Memory.AddChar(c);
                }
                caller.Memory.AddChar(0);
                ((FGMSECInstructionSet)caller.usingInstructionSet).CPU.SetRegData(3, (uint)addr);
            });
            return(exec);
        }