Esempio n. 1
0
        public static string ToString(AsmSignatureEnum operandType)
        {
            switch (operandType)
            {
            case AsmSignatureEnum.REG_AL: return("AL");

            case AsmSignatureEnum.REG_AX: return("AX");

            case AsmSignatureEnum.REG_EAX: return("EAX");

            case AsmSignatureEnum.REG_RAX: return("RAX");

            case AsmSignatureEnum.REG_CL: return("CL");

            case AsmSignatureEnum.REG_CX: return("CX");

            case AsmSignatureEnum.REG_ECX: return("ECX");

            case AsmSignatureEnum.REG_RCX: return("RCX");

            case AsmSignatureEnum.REG_DX: return("DX");

            case AsmSignatureEnum.REG_EDX: return("EDX");

            case AsmSignatureEnum.REG_CS: return("CS");

            case AsmSignatureEnum.REG_DS: return("DS");

            case AsmSignatureEnum.REG_ES: return("ES");

            case AsmSignatureEnum.REG_SS: return("SS");

            case AsmSignatureEnum.REG_FS: return("FS");

            case AsmSignatureEnum.REG_GS: return("GS");

            case AsmSignatureEnum.IMM: return("IMM");

            case AsmSignatureEnum.IMM8: return("IMM8");

            case AsmSignatureEnum.IMM16: return("IMM16");

            case AsmSignatureEnum.IMM32: return("IMM32");

            case AsmSignatureEnum.IMM64: return("IMM64");

            case AsmSignatureEnum.imm_imm: return("imm:imm");

            case AsmSignatureEnum.imm16_imm: return("imm16:imm");

            case AsmSignatureEnum.imm_imm16: return("imm:imm16");

            case AsmSignatureEnum.imm32_imm: return("imm32:imm");

            case AsmSignatureEnum.imm_imm32: return("imm:imm32");

            case AsmSignatureEnum.NEAR: return("near");

            case AsmSignatureEnum.FAR: return("far");

            case AsmSignatureEnum.SHORT_ENUM: return("short");

            case AsmSignatureEnum.UNITY: return("unity 1");

            case AsmSignatureEnum.Z: return("z");

            case AsmSignatureEnum.ER: return("er");

            case AsmSignatureEnum.REG_XMM0: return("XMM0");

            case AsmSignatureEnum.XMMREG: return("XMM");

            case AsmSignatureEnum.YMMREG: return("YMM");

            case AsmSignatureEnum.ZMMREG: return("ZMM");

            case AsmSignatureEnum.VM32X: return("xmem32");

            case AsmSignatureEnum.VM64X: return("xmem64");

            case AsmSignatureEnum.VM32Y: return("ymem32");

            case AsmSignatureEnum.VM64Y: return("ymem64");

            case AsmSignatureEnum.VM32Z: return("zmem32");

            case AsmSignatureEnum.VM64Z: return("zmem64");

            case AsmSignatureEnum.M32BCST: return("M32bcst");

            case AsmSignatureEnum.M64BCST: return("M64bcst");

            case AsmSignatureEnum.MEM_OFFSET: return("mem_offs");

            case AsmSignatureEnum.REG_SREG: return("segment register");

            case AsmSignatureEnum.REG_DREG: return("debug register");

            case AsmSignatureEnum.MMXREG: return("XMM");

            case AsmSignatureEnum.BNDREG: return("BND");

            case AsmSignatureEnum.FPUREG: return("fpureg");

            case AsmSignatureEnum.K: return("K");

            case AsmSignatureEnum.SAE: return("{SAE}");

            default:
                // AsmDudeToolsStatic.Output_WARNING("AsmSignatureTools:ToString: " + operandType);
                return(operandType.ToString());
            }
        }
Esempio n. 2
0
        public static bool Is_Allowed_Operand(Operand op, AsmSignatureEnum operandType)
        {
            switch (operandType)
            {
            case AsmSignatureEnum.UNKNOWN: return(true);

            case AsmSignatureEnum.MEM: return(op.IsMem);

            case AsmSignatureEnum.M8: return(op.IsMem && op.NBits == 8);

            case AsmSignatureEnum.M16: return(op.IsMem && op.NBits == 16);

            case AsmSignatureEnum.M32: return(op.IsMem && op.NBits == 32);

            case AsmSignatureEnum.M64: return(op.IsMem && op.NBits == 64);

            case AsmSignatureEnum.M80: return(op.IsMem && op.NBits == 80);

            case AsmSignatureEnum.M128: return(op.IsMem && op.NBits == 128);

            case AsmSignatureEnum.M256: return(op.IsMem && op.NBits == 256);

            case AsmSignatureEnum.M512: return(op.IsMem && op.NBits == 512);

            case AsmSignatureEnum.R8: return(op.IsReg && op.NBits == 8);

            case AsmSignatureEnum.R16: return(op.IsReg && op.NBits == 16);

            case AsmSignatureEnum.R32: return(op.IsReg && op.NBits == 32);

            case AsmSignatureEnum.R64: return(op.IsReg && op.NBits == 64);

            case AsmSignatureEnum.REG_AL: return(op.IsReg && op.Rn == Rn.AL);

            case AsmSignatureEnum.REG_AX: return(op.IsReg && op.Rn == Rn.AX);

            case AsmSignatureEnum.REG_EAX: return(op.IsReg && op.Rn == Rn.EAX);

            case AsmSignatureEnum.REG_RAX: return(op.IsReg && op.Rn == Rn.RAX);

            case AsmSignatureEnum.REG_CL: return(op.IsReg && op.Rn == Rn.CL);

            case AsmSignatureEnum.REG_CX: return(op.IsReg && op.Rn == Rn.CX);

            case AsmSignatureEnum.REG_ECX: return(op.IsReg && op.Rn == Rn.ECX);

            case AsmSignatureEnum.REG_RCX: return(op.IsReg && op.Rn == Rn.RCX);

            case AsmSignatureEnum.REG_DX: return(op.IsReg && op.Rn == Rn.DX);

            case AsmSignatureEnum.REG_EDX: return(op.IsReg && op.Rn == Rn.EDX);

            case AsmSignatureEnum.REG_XMM0: return(op.IsReg && op.Rn == Rn.XMM0);

            case AsmSignatureEnum.REG_CS: return(op.IsReg && op.Rn == Rn.CS);

            case AsmSignatureEnum.REG_DS: return(op.IsReg && op.Rn == Rn.DS);

            case AsmSignatureEnum.REG_ES: return(op.IsReg && op.Rn == Rn.ES);

            case AsmSignatureEnum.REG_SS: return(op.IsReg && op.Rn == Rn.SS);

            case AsmSignatureEnum.REG_FS: return(op.IsReg && op.Rn == Rn.FS);

            case AsmSignatureEnum.REG_GS: return(op.IsReg && op.Rn == Rn.GS);

            case AsmSignatureEnum.IMM: return(op.IsImm);

            case AsmSignatureEnum.IMM8: return(op.IsImm && op.NBits == 8);

            case AsmSignatureEnum.IMM16: return(op.IsImm && op.NBits == 16);

            case AsmSignatureEnum.IMM32: return(op.IsImm && op.NBits == 32);

            case AsmSignatureEnum.IMM64: return(op.IsImm && op.NBits == 64);

            case AsmSignatureEnum.imm_imm: return(true);

            case AsmSignatureEnum.imm16_imm: return(true);

            case AsmSignatureEnum.imm_imm16: return(true);

            case AsmSignatureEnum.imm32_imm: return(true);

            case AsmSignatureEnum.imm_imm32: return(true);

            case AsmSignatureEnum.NEAR: return(op.IsImm);

            case AsmSignatureEnum.FAR: return(op.IsImm);

            case AsmSignatureEnum.SHORT_ENUM: return(op.IsImm);

            case AsmSignatureEnum.UNITY: return(op.IsImm && (op.Imm == 1));

            case AsmSignatureEnum.Z: return(false);

            case AsmSignatureEnum.ER: return(false);

            case AsmSignatureEnum.SAE: return(false);

            case AsmSignatureEnum.K: return(op.IsReg && (RegisterTools.IsOpmaskRegister(op.Rn)));

            case AsmSignatureEnum.XMMREG: return(op.IsReg && RegisterTools.IsSseRegister(op.Rn));

            case AsmSignatureEnum.YMMREG: return(op.IsReg && RegisterTools.IsAvxRegister(op.Rn));

            case AsmSignatureEnum.ZMMREG: return(op.IsReg && RegisterTools.IsAvx512Register(op.Rn));

            case AsmSignatureEnum.M32BCST: return(op.IsMem && op.NBits == 32);

            case AsmSignatureEnum.M64BCST: return(op.IsMem && op.NBits == 64);

            case AsmSignatureEnum.MEM_OFFSET: return(op.IsImm);

            case AsmSignatureEnum.REG_SREG: return(op.IsReg && (RegisterTools.IsSegmentRegister(op.Rn)));

            case AsmSignatureEnum.CR0: return(op.IsReg && (op.Rn == Rn.CR0));

            case AsmSignatureEnum.CR1: return(op.IsReg && (op.Rn == Rn.CR1));

            case AsmSignatureEnum.CR2: return(op.IsReg && (op.Rn == Rn.CR2));

            case AsmSignatureEnum.CR3: return(op.IsReg && (op.Rn == Rn.CR3));

            case AsmSignatureEnum.CR4: return(op.IsReg && (op.Rn == Rn.CR4));

            case AsmSignatureEnum.CR5: return(op.IsReg && (op.Rn == Rn.CR5));

            case AsmSignatureEnum.CR6: return(op.IsReg && (op.Rn == Rn.CR6));

            case AsmSignatureEnum.CR7: return(op.IsReg && (op.Rn == Rn.CR7));

            case AsmSignatureEnum.CR8: return(op.IsReg && (op.Rn == Rn.CR8));

            case AsmSignatureEnum.REG_DREG: return(op.IsReg && (RegisterTools.IsDebugRegister(op.Rn)));

            case AsmSignatureEnum.BNDREG: return(op.IsReg && (RegisterTools.IsBoundRegister(op.Rn)));

            default:
                AsmDudeToolsStatic.Output_WARNING("AsmSignatureTools:isAllowed: add " + operandType);
                break;
            }
            return(true);
        }
Esempio n. 3
0
        /// <summary>Get brief description of the operand</summary>
        public static string Get_Doc(AsmSignatureEnum operandType)
        {
            switch (operandType)
            {
            case AsmSignatureEnum.MEM: return("memory operand");

            case AsmSignatureEnum.M8: return("8-bits memory operand");

            case AsmSignatureEnum.M16: return("16-bits memory operand");

            case AsmSignatureEnum.M32: return("32-bits memory operand");

            case AsmSignatureEnum.M64: return("64-bits memory operand");

            case AsmSignatureEnum.M80: return("80-bits memory operand");

            case AsmSignatureEnum.M128: return("128-bits memory operand");

            case AsmSignatureEnum.M256: return("256-bits memory operand");

            case AsmSignatureEnum.M512: return("512-bits memory operand");

            case AsmSignatureEnum.R8: return("8-bits register");

            case AsmSignatureEnum.R16: return("16-bits register");

            case AsmSignatureEnum.R32: return("32-bits register");

            case AsmSignatureEnum.R64: return("64-bits register");

            case AsmSignatureEnum.REG_AL: return("AL register");

            case AsmSignatureEnum.REG_AX: return("AX register");

            case AsmSignatureEnum.REG_EAX: return("EAX register");

            case AsmSignatureEnum.REG_RAX: return("RAX register");

            case AsmSignatureEnum.REG_CL: return("CL register");

            case AsmSignatureEnum.REG_CX: return("CX register");

            case AsmSignatureEnum.REG_ECX: return("ECX register");

            case AsmSignatureEnum.REG_RCX: return("RCX register");

            case AsmSignatureEnum.REG_DX: return("DX register");

            case AsmSignatureEnum.REG_EDX: return("EDX register");

            case AsmSignatureEnum.REG_CS: return("CS register");

            case AsmSignatureEnum.REG_DS: return("DS register");

            case AsmSignatureEnum.REG_ES: return("ES register");

            case AsmSignatureEnum.REG_SS: return("SS register");

            case AsmSignatureEnum.REG_FS: return("FS register");

            case AsmSignatureEnum.REG_GS: return("GS register");

            case AsmSignatureEnum.IMM: return("immediate constant");

            case AsmSignatureEnum.IMM8: return("8-bits immediate constant");

            case AsmSignatureEnum.IMM16: return("16-bits immediate constant");

            case AsmSignatureEnum.IMM32: return("32-bits immediate constant");

            case AsmSignatureEnum.IMM64: return("64-bits immediate constant");

            case AsmSignatureEnum.imm_imm: return("immediate constants");

            case AsmSignatureEnum.imm16_imm: return("immediate constants");

            case AsmSignatureEnum.imm_imm16: return("immediate constants");

            case AsmSignatureEnum.imm32_imm: return("immediate constants");

            case AsmSignatureEnum.imm_imm32: return("immediate constants");

            case AsmSignatureEnum.NEAR: return("near ptr");

            case AsmSignatureEnum.FAR: return("far ptr");

            case AsmSignatureEnum.SHORT_ENUM: return("short ptr");

            case AsmSignatureEnum.UNITY: return("immediate value 1");

            case AsmSignatureEnum.ZERO: return("immediate value 0");

            case AsmSignatureEnum.SAE: return("Optional Suppress All Exceptions {SAE}");

            case AsmSignatureEnum.ER: return("Optional Rounding Mode {RN-SAE}/{RU-SAE}/{RD-SAE}/{RZ-SAE}");

            case AsmSignatureEnum.Z: return("Optional Zero Mask {Z}");

            case AsmSignatureEnum.REG_XMM0: return("XMM0 register");

            case AsmSignatureEnum.XMMREG: return("xmm register");

            case AsmSignatureEnum.YMMREG: return("ymm register");

            case AsmSignatureEnum.ZMMREG: return("zmm register");

            case AsmSignatureEnum.K: return("mask register");

            case AsmSignatureEnum.M32BCST: return("vector broadcasted from a 32-bit memory location");

            case AsmSignatureEnum.M64BCST: return("vector broadcasted from a 64-bit memory location");

            case AsmSignatureEnum.MEM_OFFSET: return("memory offset");

            case AsmSignatureEnum.REG_SREG: return("segment register");

            case AsmSignatureEnum.REG_DREG: return("debug register");

            default:
                AsmDudeToolsStatic.Output_WARNING("SignatureStore:getDoc: add " + operandType);
                return(operandType.ToString());

                break;
            }
        }