Esempio n. 1
0
        static ExecutionResult Execute(ILoaderResult loaded)
        {
            // Loader Stage 2 - setup file
            var image = loaded.Image.ToArray();

            IKernel kernel;
            Agent   agent;

            if (loaded.GetType() == typeof(LoaderResult32))
            {
                Console.Out.WriteLine("Emulating Linux 32-bit kernel syscall interface");
                kernel = new Linux32Kernel();
                agent  = new Agent(kernel, image, ((LoaderResult32)loaded).EntryPoint);
            }
            else if (loaded.GetType() == typeof(LoaderResult64))
            {
                Console.Out.WriteLine("Emulating Linux 64-bit kernel syscall interface");
                kernel = new Linux64Kernel();
                agent  = new Agent64(kernel, image, ((LoaderResult64)loaded).EntryPoint);
            }
            else
            {
                throw new InvalidOperationException();
            }

            int?ret;

            do
            {
                ret = agent.Tick();
                //agent.Dump();
            } while (ret == null);
            switch (ret)
            {
            case -666:
                throw new Exception($"ERROR: Unknown bytecode!");

            case 0:
                Console.WriteLine("\r\n\r\nProgram terminated.");
                return(new ExecutionResult(0));

            default:
                Console.WriteLine("\r\n\r\nProgram errored out.");
                return(new ExecutionResult(ret ?? int.MinValue));
            }
        }
Esempio n. 2
0
 public CsvLoader(ILoaderResult loaderResult)
 {
     LoaderResult = loaderResult;
 }