Esempio n. 1
0
        bool CheckPrefix(TargetReader reader)
        {
            byte opcode = reader.PeekByte();

            if ((opcode >= 0x40) && (opcode <= 0x4f))
            {
                if (!Is64BitMode)
                {
                    return(false);
                }

                if ((opcode & 0x01) != 0)
                {
                    RexPrefix |= X86_REX_Prefix.REX_B;
                }
                if ((opcode & 0x02) != 0)
                {
                    RexPrefix |= X86_REX_Prefix.REX_X;
                }
                if ((opcode & 0x04) != 0)
                {
                    RexPrefix |= X86_REX_Prefix.REX_R;
                }
                if ((opcode & 0x08) != 0)
                {
                    RexPrefix |= X86_REX_Prefix.REX_W;
                }
                return(true);
            }
            else if (opcode == 0x26)
            {
                Prefix |= X86_Prefix.ES;
                return(true);
            }
            else if (opcode == 0x2e)
            {
                Prefix |= X86_Prefix.CS;
                return(true);
            }
            else if (opcode == 0x36)
            {
                Prefix |= X86_Prefix.SS;
                return(true);
            }
            else if (opcode == 0x3e)
            {
                Prefix |= X86_Prefix.DS;
                return(true);
            }
            else if (opcode == 0x64)
            {
                Prefix |= X86_Prefix.FS;
                return(true);
            }
            else if (opcode == 0x65)
            {
                Prefix |= X86_Prefix.GS;
                return(true);
            }
            else if (opcode == 0x66)
            {
                Prefix |= X86_Prefix.DATA;
                return(true);
            }
            else if (opcode == 0x67)
            {
                Prefix |= X86_Prefix.ADDR;
                return(true);
            }
            else if (opcode == 0xf0)
            {
                Prefix |= X86_Prefix.LOCK;
                return(true);
            }
            else if (opcode == 0xf2)
            {
                Prefix |= X86_Prefix.REPNZ;
                return(true);
            }
            else if (opcode == 0xf3)
            {
                Prefix |= X86_Prefix.REPZ;
                return(true);
            }

            return(false);
        }
Esempio n. 2
0
        bool CheckPrefix(TargetReader reader)
        {
            byte opcode = reader.PeekByte ();
            if ((opcode >= 0x40) && (opcode <= 0x4f)) {
                if (!Is64BitMode)
                    return false;

                if ((opcode & 0x01) != 0)
                    RexPrefix |= X86_REX_Prefix.REX_B;
                if ((opcode & 0x02) != 0)
                    RexPrefix |= X86_REX_Prefix.REX_X;
                if ((opcode & 0x04) != 0)
                    RexPrefix |= X86_REX_Prefix.REX_R;
                if ((opcode & 0x08) != 0)
                    RexPrefix |= X86_REX_Prefix.REX_W;
                return true;
            } else if (opcode == 0x26) {
                Prefix |= X86_Prefix.ES;
                return true;
            } else if (opcode == 0x2e) {
                Prefix |= X86_Prefix.CS;
                return true;
            } else if (opcode == 0x36) {
                Prefix |= X86_Prefix.SS;
                return true;
            } else if (opcode == 0x3e) {
                Prefix |= X86_Prefix.DS;
                return true;
            } else if (opcode == 0x64) {
                Prefix |= X86_Prefix.FS;
                return true;
            } else if (opcode == 0x65) {
                Prefix |= X86_Prefix.GS;
                return true;
            } else if (opcode == 0x66) {
                Prefix |= X86_Prefix.DATA;
                return true;
            } else if (opcode == 0x67) {
                Prefix |= X86_Prefix.ADDR;
                return true;
            } else if (opcode == 0xf0) {
                Prefix |= X86_Prefix.LOCK;
                return true;
            } else if (opcode == 0xf2) {
                Prefix |= X86_Prefix.REPNZ;
                return true;
            } else if (opcode == 0xf3) {
                Prefix |= X86_Prefix.REPZ;
                return true;
            }

            return false;
        }