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)); } }
public CsvLoader(ILoaderResult loaderResult) { LoaderResult = loaderResult; }