public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters) { var i1 = (int)stack.Pop(); var i2 = (int)stack.Pop(); stack.Push(i1 + i2); }
public static void Execute(IEnumerable <WASMInstruction> expression, WASMModule context, Stack <object> stack, params object[] parameters) { foreach (WASMInstruction instruction in expression) { if (instruction.OP == OPCode.End) { break; } instruction.Execute(stack, context, parameters); } }
public static async Task Main(string[] args) { byte[] originalModuleData = File.ReadAllBytes(args[0]); var originalModule = new WASMModule(originalModuleData); var disassembleTime = Stopwatch.StartNew(); originalModule.Disassemble(); disassembleTime.Stop(); string assembledPath = args[0].Replace("original_", string.Empty); using var fs = File.Create(assembledPath); var writer = PipeWriter.Create(fs); var assembleTime = Stopwatch.StartNew(); originalModule.Assemble(writer); await writer.FlushAsync(); assembleTime.Stop(); await fs.DisposeAsync(); Console.WriteLine($"Assemble: " + assembleTime.Elapsed.ToString("mm\\:ss\\.ff")); Console.WriteLine($"Disassemble: " + disassembleTime.Elapsed.ToString("mm\\:ss\\.ff")); bool areModulesEqual = true; byte[] assembledModuleData = await File.ReadAllBytesAsync(assembledPath); for (int i = 4; i < Math.Min(originalModuleData.Length, assembledModuleData.Length); i++) { if (originalModuleData[i] == assembledModuleData[i]) { continue; } string originalChunkHex = BitConverter.ToString(originalModuleData, i, 10); string modifiedChunkHex = BitConverter.ToString(assembledModuleData, i, 10); areModulesEqual = false; Debugger.Break(); } Console.WriteLine("Are Modules Equal: " + areModulesEqual); Console.ReadLine(); }
public static Stack <object> Execute(IEnumerable <WASMInstruction> expression, WASMModule context) { var stack = new Stack <object>(); Execute(expression, context, stack); return(stack); }
public WASMMachine(WASMModule context) { _context = context; Stack = new Stack <object>(); }
public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters) { stack.Push(Constant); }
public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters) { WASMMachine.Execute(context.GlobalSec[(int)Index].Expression, context, stack); }
public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters) => stack.Push((int)stack.Pop() == 0);
public T EvaluateOffset <T>(WASMModule context) { return((T)WASMMachine.Execute(Expression, context).Pop()); }