示例#1
0
        public InstructionGroups(GenTypes genTypes)
        {
            this.genTypes = genTypes;
            var encoderTypes = genTypes.GetObject <EncoderTypes>(TypeIds.EncoderTypes);

            legacyToOpKind = encoderTypes.LegacyOpHandlers.ToDictionary(a => (LegacyOpKind)a.legacyOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value);
            vexToOpKind    = encoderTypes.VexOpHandlers.ToDictionary(a => (VexOpKind)a.vexOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value);
            xopToOpKind    = encoderTypes.XopOpHandlers.ToDictionary(a => (XopOpKind)a.xopOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value);
            evexToOpKind   = encoderTypes.EvexOpHandlers.ToDictionary(a => (EvexOpKind)a.evexOpKind.Value, a => (OpCodeOperandKind)a.opCodeOperandKind.Value);
            d3nowOps       = new OpCodeOperandKind[] {
                OpCodeOperandKind.mm_reg,
                OpCodeOperandKind.mm_or_mem,
            };
            ignoredCodes = genTypes.GetKeptCodeValues(new[] {
                Code.INVALID,
                Code.DeclareByte,
                Code.DeclareWord,
                Code.DeclareDword,
                Code.DeclareQword,
                Code.Jo_rel8_16,
                Code.Jo_rel8_32,
                Code.Jo_rel8_64,
                Code.Jno_rel8_16,
                Code.Jno_rel8_32,
                Code.Jno_rel8_64,
                Code.Jb_rel8_16,
                Code.Jb_rel8_32,
                Code.Jb_rel8_64,
                Code.Jae_rel8_16,
                Code.Jae_rel8_32,
                Code.Jae_rel8_64,
                Code.Je_rel8_16,
                Code.Je_rel8_32,
                Code.Je_rel8_64,
                Code.Jne_rel8_16,
                Code.Jne_rel8_32,
                Code.Jne_rel8_64,
                Code.Jbe_rel8_16,
                Code.Jbe_rel8_32,
                Code.Jbe_rel8_64,
                Code.Ja_rel8_16,
                Code.Ja_rel8_32,
                Code.Ja_rel8_64,
                Code.Js_rel8_16,
                Code.Js_rel8_32,
                Code.Js_rel8_64,
                Code.Jns_rel8_16,
                Code.Jns_rel8_32,
                Code.Jns_rel8_64,
                Code.Jp_rel8_16,
                Code.Jp_rel8_32,
                Code.Jp_rel8_64,
                Code.Jnp_rel8_16,
                Code.Jnp_rel8_32,
                Code.Jnp_rel8_64,
                Code.Jl_rel8_16,
                Code.Jl_rel8_32,
                Code.Jl_rel8_64,
                Code.Jge_rel8_16,
                Code.Jge_rel8_32,
                Code.Jge_rel8_64,
                Code.Jle_rel8_16,
                Code.Jle_rel8_32,
                Code.Jle_rel8_64,
                Code.Jg_rel8_16,
                Code.Jg_rel8_32,
                Code.Jg_rel8_64,
                Code.Jo_rel16,
                Code.Jo_rel32_32,
                Code.Jo_rel32_64,
                Code.Jno_rel16,
                Code.Jno_rel32_32,
                Code.Jno_rel32_64,
                Code.Jb_rel16,
                Code.Jb_rel32_32,
                Code.Jb_rel32_64,
                Code.Jae_rel16,
                Code.Jae_rel32_32,
                Code.Jae_rel32_64,
                Code.Je_rel16,
                Code.Je_rel32_32,
                Code.Je_rel32_64,
                Code.Jne_rel16,
                Code.Jne_rel32_32,
                Code.Jne_rel32_64,
                Code.Jbe_rel16,
                Code.Jbe_rel32_32,
                Code.Jbe_rel32_64,
                Code.Ja_rel16,
                Code.Ja_rel32_32,
                Code.Ja_rel32_64,
                Code.Js_rel16,
                Code.Js_rel32_32,
                Code.Js_rel32_64,
                Code.Jns_rel16,
                Code.Jns_rel32_32,
                Code.Jns_rel32_64,
                Code.Jp_rel16,
                Code.Jp_rel32_32,
                Code.Jp_rel32_64,
                Code.Jnp_rel16,
                Code.Jnp_rel32_32,
                Code.Jnp_rel32_64,
                Code.Jl_rel16,
                Code.Jl_rel32_32,
                Code.Jl_rel32_64,
                Code.Jge_rel16,
                Code.Jge_rel32_32,
                Code.Jge_rel32_64,
                Code.Jle_rel16,
                Code.Jle_rel32_32,
                Code.Jle_rel32_64,
                Code.Jg_rel16,
                Code.Jg_rel32_32,
                Code.Jg_rel32_64,
                Code.Loopne_rel8_16_CX,
                Code.Loopne_rel8_32_CX,
                Code.Loopne_rel8_16_ECX,
                Code.Loopne_rel8_32_ECX,
                Code.Loopne_rel8_64_ECX,
                Code.Loopne_rel8_16_RCX,
                Code.Loopne_rel8_64_RCX,
                Code.Loope_rel8_16_CX,
                Code.Loope_rel8_32_CX,
                Code.Loope_rel8_16_ECX,
                Code.Loope_rel8_32_ECX,
                Code.Loope_rel8_64_ECX,
                Code.Loope_rel8_16_RCX,
                Code.Loope_rel8_64_RCX,
                Code.Loop_rel8_16_CX,
                Code.Loop_rel8_32_CX,
                Code.Loop_rel8_16_ECX,
                Code.Loop_rel8_32_ECX,
                Code.Loop_rel8_64_ECX,
                Code.Loop_rel8_16_RCX,
                Code.Loop_rel8_64_RCX,
                Code.Jcxz_rel8_16,
                Code.Jcxz_rel8_32,
                Code.Jecxz_rel8_16,
                Code.Jecxz_rel8_32,
                Code.Jecxz_rel8_64,
                Code.Jrcxz_rel8_16,
                Code.Jrcxz_rel8_64,
                Code.Call_rel16,
                Code.Call_rel32_32,
                Code.Call_rel32_64,
                Code.Jmp_rel16,
                Code.Jmp_rel32_32,
                Code.Jmp_rel32_64,
                Code.Jmp_rel8_16,
                Code.Jmp_rel8_32,
                Code.Jmp_rel8_64,
                Code.Jmpe_disp16,
                Code.Jmpe_disp32,
                Code.Call_ptr1616,
                Code.Call_ptr1632,
                Code.Jmp_ptr1616,
                Code.Jmp_ptr1632,
                Code.Xbegin_rel16,
                Code.Xbegin_rel32,
                Code.Insb_m8_DX,
                Code.Insw_m16_DX,
                Code.Insd_m32_DX,
                Code.Outsb_DX_m8,
                Code.Outsw_DX_m16,
                Code.Outsd_DX_m32,
                Code.Stosb_m8_AL,
                Code.Stosw_m16_AX,
                Code.Stosd_m32_EAX,
                Code.Stosq_m64_RAX,
                Code.Lodsb_AL_m8,
                Code.Lodsw_AX_m16,
                Code.Lodsd_EAX_m32,
                Code.Lodsq_RAX_m64,
                Code.Scasb_AL_m8,
                Code.Scasw_AX_m16,
                Code.Scasd_EAX_m32,
                Code.Scasq_RAX_m64,
                Code.Movsb_m8_m8,
                Code.Movsw_m16_m16,
                Code.Movsd_m32_m32,
                Code.Movsq_m64_m64,
                Code.Cmpsb_m8_m8,
                Code.Cmpsw_m16_m16,
                Code.Cmpsd_m32_m32,
                Code.Cmpsq_m64_m64,
                Code.Maskmovq_rDI_mm_mm,
                Code.Maskmovdqu_rDI_xmm_xmm,
                Code.VEX_Vmaskmovdqu_rDI_xmm_xmm,
            }).ToHashSet();
        }