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; } }
public void EmitAx(EOpCode opCode, int ax) { var i = (uint)ax << 6 | opCode.ToInt(); Insts.Add((UInt32)i); }
public void EmitABx(EOpCode opCode, int a, int bx) { var i = (uint)bx << 14 | (uint)a << 6 | opCode.ToInt(); Insts.Add((UInt32)i); }
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); }
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); }
/// <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); }
public static int ToInt(this EOpCode code) { return((int)code); }
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); }