Exemplo n.º 1
0
        public void EmitUnaryOp(EOpCode op, int a, int b)
        {
            switch (op)
            {
            case EOpCode.OP_NOT:
                EmitABC(EOpCode.OP_NOT, a, b, 0);
                break;

            case EOpCode.OP_BNOT:
                EmitABC(EOpCode.OP_BNOT, a, b, 0);
                break;

            case EOpCode.OP_LEN:
                EmitABC(EOpCode.OP_LEN, a, b, 0);
                break;

            case EOpCode.OP_UNM:
                EmitABC(EOpCode.OP_UNM, a, b, 0);
                break;
            }
        }
Exemplo n.º 2
0
        public void EmitAx(EOpCode opCode, int ax)
        {
            var i = (uint)ax << 6 | opCode.ToInt();

            Insts.Add((UInt32)i);
        }
Exemplo n.º 3
0
        public void EmitABx(EOpCode opCode, int a, int bx)
        {
            var i = (uint)bx << 14 | (uint)a << 6 | opCode.ToInt();

            Insts.Add((UInt32)i);
        }
Exemplo n.º 4
0
        public void EmitAsBx(EOpCode opCode, int a, int b)
        {
            var i = (uint)(b + Instruction.MAXARG_sBx) << 14 | (uint)a << 6 | opCode.ToInt();

            Insts.Add((UInt32)i);
        }
Exemplo n.º 5
0
        public void EmitABC(EOpCode opCode, int a, int b, int c)
        {
            var i = (uint)b << 23 | (uint)c << 14 | (uint)a << 6 | opCode.ToInt();

            Insts.Add((UInt32)i);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Read DHCP packet to object
        /// </summary>
        public static DHCPPacketBase Read(NetworkBinaryReader reader)
        {
            reader.BaseStream.Seek(0, SeekOrigin.Begin);

            if (reader.BaseStream.Length < PacketMinimumLength)
            {
                throw new DHCPException(string.Format("Packet too small: {0} bytes", reader.BaseStream.Length));
            }

            if (reader.BaseStream.Length > PacketMaxLength)
            {
                throw new DHCPException(string.Format("Packet too large: {0} bytes", reader.BaseStream.Length));
            }

            DHCPPacketBase p;

            using (reader)
            {
                Debug.WriteLine("");
                Debug.WriteLine("--- Reading DHCP packet");
                Debug.WriteLine("");

                Debug.WriteLine(string.Format("Reading op code at offset {0:D4}", reader.BaseStream.Position));
                EOpCode PacketType = (EOpCode)(byte)reader.ReadByte(); // 1

                switch (PacketType)
                {
                case EOpCode.BootReply:
                    p = new DHCPPacketBootReply();
                    break;

                case EOpCode.BootRequest:
                    p = new DHCPPacketBootRequest();
                    break;

                default:
                    throw new DHCPException("Unknown OpCode.");
                }

                Debug.WriteLine(string.Format("Reading hardware address type at offset {0:D4}", reader.BaseStream.Position));
                p.HardwareAddressType = (EHardwareType)(byte)reader.ReadByte(); // 1 (2)

                Debug.WriteLine(string.Format("Reading hardware address length at offset {0:D4}", reader.BaseStream.Position));
                byte _hwaddrlen = (byte)reader.ReadByte(); // 1 (3)

                if (_hwaddrlen > 16)
                {
                    throw new DHCPException(String.Format("Malformed packet. Hardware address length was {0}.", _hwaddrlen));
                }

                Debug.WriteLine(string.Format("Reading hops at offset {0:D4}", reader.BaseStream.Position));
                p.Hops = (byte)reader.ReadByte(); // 1 (4)

                Debug.WriteLine(string.Format("Reading transaction ID at offset {0:D4}", reader.BaseStream.Position));
                p.TransactionID = reader.ReadUInt32(); // 4 (8)

                Debug.WriteLine(string.Format("Reading seconds at offset {0:D4}", reader.BaseStream.Position));
                p.Seconds = reader.ReadUInt16(); // 2 (10)

                Debug.WriteLine(string.Format("Reading flags at offset {0:D4}", reader.BaseStream.Position));
                p.Flags = reader.ReadUInt16(); // 2 (12)

                Debug.WriteLine(string.Format("Reading IPv4 addresses at offset {0:D4}", reader.BaseStream.Position));
                p.ClientAddress     = new IPv4Address(reader.ReadBytes(4)); // 4 (16)
                p.YourAddress       = new IPv4Address(reader.ReadBytes(4)); // 4 (20)
                p.ServerAddress     = new IPv4Address(reader.ReadBytes(4)); // 4 (24)
                p.RelayAgentAddress = new IPv4Address(reader.ReadBytes(4)); // 4 (28)

                // 16 (44)
                byte[] _clienthwaddr = { };

                if (_hwaddrlen > 0)
                {
                    Debug.WriteLine(string.Format("Reading hardware address length at offset {0:D4}", reader.BaseStream.Position));
                    _clienthwaddr = reader.ReadBytes(_hwaddrlen);
                }

                // Discard rest
                reader.BaseStream.Seek(44, SeekOrigin.Begin);

                Debug.WriteLine(string.Format("Reading server host name at offset {0:D4}", reader.BaseStream.Position));
                p.ServerHostName = reader.ReadBytes(64); // 64 (128)

                //reader.BaseStream.Seek(108, SeekOrigin.Begin);

                Debug.WriteLine(string.Format("Reading file name at offset {0:D4}", reader.BaseStream.Position));
                p.File = reader.ReadBytes(128); // 128 (236)

                if (p.HardwareAddressType == EHardwareType.Ethernet && _hwaddrlen == 6)
                {
                    byte[] macaddr = new byte[6];
                    Array.Copy(_clienthwaddr, 0, macaddr, 0, 6);
                    p.ClientHardwareAddress = new HardwareAddress(new MacAddress(macaddr));
                }
                else
                {
                    p.ClientHardwareAddress = new HardwareAddress(_clienthwaddr);
                }

                if (reader.BaseStream.Position != 236)
                {
                    throw new DHCPException(
                              string.Format("Packet position should be at 236 bytes but it is {0}.", reader.BaseStream.Position));
                }

                bool validCookie = true;

                Debug.WriteLine(string.Format("Reading magic cookie at offset {0:D4}", reader.BaseStream.Position));

                if (reader.ReadByte() != 99)
                {
                    validCookie = false;
                }

                if (reader.ReadByte() != 130)
                {
                    validCookie = false;
                }

                if (reader.ReadByte() != 83)
                {
                    validCookie = false;
                }

                if (reader.ReadByte() != 99)
                {
                    validCookie = false;
                }

                if (!validCookie)
                {
                    throw new DHCPException(String.Format("Malformed packet: Magic cookie not found."));
                }

                if (reader.BaseStream.Position != 240)
                {
                    throw new DHCPException(
                              string.Format("Packet position should be at 240 bytes but it is {0}.", reader.BaseStream.Position));
                }

                // Options
                p.Options = ReadOptions(reader);
            }

            return(p);
        }
Exemplo n.º 7
0
 public static int ToInt(this EOpCode code)
 {
     return((int)code);
 }
Exemplo n.º 8
0
 public VMOp(EOpCode cd, int rnd)
 {
     this._OpCd  = cd;
     this._OpRnd = rnd;
 }
        private OpCode Translate(EOpCode opcode)
        {
            var t = typeof(OpCodes);
            var fi = t.GetField(opcode.ToString(), BindingFlags.Static | BindingFlags.Public);

            if (fi == null)
                return default(OpCode);
            else
                return (OpCode)fi.GetValue(null);
        }