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