コード例 #1
0
ファイル: AddI32Ins.cs プロジェクト: ArachisH/Wazzy
        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);
        }
コード例 #2
0
 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);
     }
 }
コード例 #3
0
        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();
        }
コード例 #4
0
        public static Stack <object> Execute(IEnumerable <WASMInstruction> expression, WASMModule context)
        {
            var stack = new Stack <object>();

            Execute(expression, context, stack);
            return(stack);
        }
コード例 #5
0
        public WASMMachine(WASMModule context)
        {
            _context = context;

            Stack = new Stack <object>();
        }
コード例 #6
0
 public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters)
 {
     stack.Push(Constant);
 }
コード例 #7
0
 public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters)
 {
     WASMMachine.Execute(context.GlobalSec[(int)Index].Expression, context, stack);
 }
コード例 #8
0
 public override void Execute(Stack <object> stack, WASMModule context, params object[] parameters) => stack.Push((int)stack.Pop() == 0);
コード例 #9
0
ファイル: DataSubsection.cs プロジェクト: ArachisH/Wazzy
 public T EvaluateOffset <T>(WASMModule context)
 {
     return((T)WASMMachine.Execute(Expression, context).Pop());
 }