Ejemplo n.º 1
0
        public ExportSubsection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null)
        {
            _functionOffsetProvider = functionOffsetProvider;

            Name        = input.ReadString();
            Description = (ImpexDesc)input.ReadByte();
            Index       = input.ReadIntULEB128();
        }
Ejemplo n.º 2
0
 public ElementSection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null)
     : base(WASMSectionId.ElementSection)
 {
     Capacity = (int)input.ReadIntULEB128();
     for (int i = 0; i < Capacity; i++)
     {
         Add(new ElementSubsection(ref input, functionOffsetProvider));
     }
 }
Ejemplo n.º 3
0
        public ElementSubsection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null)
        {
            _functionOffsetProvider = functionOffsetProvider;

            TableIndex      = input.ReadIntULEB128();
            Expression      = input.ReadExpression();
            FunctionIndices = new List <uint>((int)input.ReadIntULEB128());
            for (int i = 0; i < FunctionIndices.Capacity; i++)
            {
                FunctionIndices.Add(input.ReadIntULEB128());
            }
        }
Ejemplo n.º 4
0
        public List <WASMInstruction> ReadExpression(IFunctionOffsetProvider functionOffsetProvider, bool isBreakingOnElseInstruction = false)
        {
            var expression = new List <WASMInstruction>(3);

            while (Position < Length)
            {
                var op          = (OPCode)ReadByte();
                var instruction = WASMInstruction.Create(ref this, op, functionOffsetProvider);

                expression.Add(instruction);
                if (op == OPCode.End || (isBreakingOnElseInstruction && op == OPCode.Else))
                {
                    break;
                }
            }
            return(expression);
        }
Ejemplo n.º 5
0
        public CodeSubsection(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider)
        {
            _functionOffsetProvider = functionOffsetProvider;

            int funcSize = (int)input.ReadIntULEB128();
            int funcEnd  = input.Position + funcSize;

            Locals = new List <Local>((int)input.ReadIntULEB128());
            for (int i = 0; i < Locals.Capacity; i++)
            {
                Locals.Add(new Local(ref input));
            }

            Bytecode = new byte[funcEnd - input.Position];
            input.ReadBytes(Bytecode);

            if (funcEnd != input.Position)
            {
                throw new Exception("Malformed subsection, since the expected ending position did not match the actual ending position.");
            }
        }
Ejemplo n.º 6
0
 public CallIns(ref WASMReader input, IFunctionOffsetProvider functionOffsetProvider = null)
     : this(input.ReadIntULEB128())
 {
     _functionOffsetProvider = functionOffsetProvider;
 }