Пример #1
0
        public LuaVM(Stream fs)
        {
            reader = new BinaryReader(fs);

            byte[] signature = reader.ReadBytes(LUA_SIGNATURE.Length);
            for (int i = 0; i < signature.Length; i++)
            {
                if (signature[i] != LUA_SIGNATURE[i])
                {
                    throw new Exception("lua magic mismatch");
                }
            }

            byte version = reader.ReadByte();

            if (version != 0x50)
            {
                throw new Exception("lua version mismatch");
            }

            config = ReadLuaVMConfig();
            //todo: validate remote vm config against local config

            if (ReadLuaNumber() != LUA_TEST_NUM)
            {
                throw new Exception("lua number mismatch");
            }


            LoadFunction();
        }
Пример #2
0
        private LuaVMConfig ReadLuaVMConfig()
        {
            LuaVMConfig config = new LuaVMConfig()
            {
                littleEndian = ReadByte(),
                intSz        = ReadByte(),
                sizeTSz      = ReadByte(),
                instrSz      = ReadByte(),
                opSz         = ReadByte(),
                //register sizes for A,B,C
                opASz    = ReadByte(),
                opBSz    = ReadByte(),
                opCSz    = ReadByte(),
                luaNumSz = ReadByte(),
            };

            return(config);
        }