x86: some AT&T instructions wrongly add one more operand in front (index 0). this fixes the issue reported by Ruslan Kabatsayev

This commit is contained in:
Nguyen Anh Quynh 2015-08-14 22:05:05 +08:00
parent b0b5fb8db1
commit b4c4d4506f

View File

@ -47237,67 +47237,14 @@ struct insn_reg2 {
};
static struct insn_reg insn_regs_att[] = {
{ X86_LODSQ, X86_REG_RAX },
{ X86_OR32i32, X86_REG_EAX },
{ X86_SUB32i32, X86_REG_EAX },
{ X86_TEST32i32, X86_REG_EAX },
{ X86_XCHG64ar, X86_REG_RAX },
{ X86_LODSB, X86_REG_AL },
{ X86_AND32i32, X86_REG_EAX },
{ X86_MOV32o32a_16, X86_REG_EAX },
{ X86_IN16ri, X86_REG_AX },
{ X86_CMP64i32, X86_REG_RAX },
{ X86_XOR32i32, X86_REG_EAX },
{ X86_XCHG16ar, X86_REG_AX },
{ X86_LODSW, X86_REG_AX },
{ X86_AND16i16, X86_REG_AX },
{ X86_INSB, X86_REG_DX },
{ X86_INSW, X86_REG_DX },
{ X86_INSL, X86_REG_DX },
{ X86_MOV64o64a, X86_REG_RAX },
{ X86_ADC16i16, X86_REG_AX },
{ X86_XCHG32ar64, X86_REG_EAX },
{ X86_ADC8i8, X86_REG_AL },
{ X86_MOV64o16a, X86_REG_AX },
{ X86_CMP32i32, X86_REG_EAX },
{ X86_AND8i8, X86_REG_AL },
{ X86_SCASW, X86_REG_AX },
{ X86_XOR8i8, X86_REG_AL },
{ X86_SUB16i16, X86_REG_AX },
{ X86_MOV8o8a, X86_REG_AL },
{ X86_MOV32ao32, X86_REG_EAX },
{ X86_OR16i16, X86_REG_AX },
{ X86_XCHG32ar, X86_REG_EAX },
{ X86_SBB8i8, X86_REG_AL },
{ X86_SCASQ, X86_REG_RAX },
{ X86_SBB32i32, X86_REG_EAX },
{ X86_XOR64i32, X86_REG_RAX },
{ X86_SUB64i32, X86_REG_RAX },
{ X86_ADD64i32, X86_REG_RAX },
{ X86_OR8i8, X86_REG_AL },
{ X86_TEST64i32, X86_REG_RAX },
{ X86_SBB16i16, X86_REG_AX },
{ X86_TEST8i8, X86_REG_AL },
{ X86_IN8ri, X86_REG_AL },
{ X86_TEST16i16, X86_REG_AX },
{ X86_SCASL, X86_REG_EAX },
{ X86_MOV16o16a_16, X86_REG_AX },
{ X86_MOV32o32a, X86_REG_EAX },
{ X86_MOV8o8a_16, X86_REG_AL },
{ X86_SUB8i8, X86_REG_AL },
{ X86_ADD8i8, X86_REG_AL },
{ X86_OR64i32, X86_REG_RAX },
{ X86_SCASB, X86_REG_AL },
{ X86_SBB64i32, X86_REG_RAX },
{ X86_ADD16i16, X86_REG_AX },
{ X86_XOR16i16, X86_REG_AX },
{ X86_MOV64o32a, X86_REG_EAX },
{ X86_AND64i32, X86_REG_RAX },
{ X86_MOV64o8a, X86_REG_AL },
{ X86_MOV16o16a, X86_REG_AX },
{ X86_LODSL, X86_REG_EAX },
{ X86_CMP8i8, X86_REG_AL },
{ X86_ADC64i32, X86_REG_RAX },
{ X86_CMP16i16, X86_REG_AX },
{ X86_ADC32i32, X86_REG_EAX },
{ X86_IN32ri, X86_REG_EAX },
{ X86_PUSHCS32, X86_REG_CS },
{ X86_PUSHDS32, X86_REG_DS },
@ -47331,25 +47278,86 @@ static struct insn_reg insn_regs_att[] = {
{ X86_POPGS16, X86_REG_GS },
{ X86_POPSS16, X86_REG_SS },
{ X86_RCL32rCL, X86_REG_CL },
{ X86_SHL8rCL, X86_REG_CL },
{ X86_SHL16rCL, X86_REG_CL },
{ X86_SHL32rCL, X86_REG_CL },
{ X86_SHL64rCL, X86_REG_CL },
{ X86_SAL8rCL, X86_REG_CL },
{ X86_SAL16rCL, X86_REG_CL },
{ X86_SAL32rCL, X86_REG_CL },
{ X86_SAL64rCL, X86_REG_CL },
{ X86_SHR8rCL, X86_REG_CL },
{ X86_SHR16rCL, X86_REG_CL },
{ X86_SHR32rCL, X86_REG_CL },
{ X86_SHR64rCL, X86_REG_CL },
{ X86_SAR8rCL, X86_REG_CL },
{ X86_SAR16rCL, X86_REG_CL },
{ X86_SAR32rCL, X86_REG_CL },
{ X86_SAR64rCL, X86_REG_CL },
{ X86_RCL8rCL, X86_REG_CL },
{ X86_RCL16rCL, X86_REG_CL },
{ X86_RCL32rCL, X86_REG_CL },
{ X86_RCL64rCL, X86_REG_CL },
{ X86_RCR8rCL, X86_REG_CL },
{ X86_RCR16rCL, X86_REG_CL },
{ X86_RCR32rCL, X86_REG_CL },
{ X86_RCR64rCL, X86_REG_CL },
{ X86_ROL8rCL, X86_REG_CL },
{ X86_ROL16rCL, X86_REG_CL },
{ X86_ROL32rCL, X86_REG_CL },
{ X86_ROL64rCL, X86_REG_CL },
{ X86_ROR8rCL, X86_REG_CL },
{ X86_ROR16rCL, X86_REG_CL },
{ X86_ROR32rCL, X86_REG_CL },
{ X86_ROR64rCL, X86_REG_CL },
{ X86_SHLD16rrCL, X86_REG_CL },
{ X86_SHRD16rrCL, X86_REG_CL },
{ X86_SHLD32rrCL, X86_REG_CL },
{ X86_SHRD32rrCL, X86_REG_CL },
{ X86_SHLD64rrCL, X86_REG_CL },
{ X86_SHRD64rrCL, X86_REG_CL },
{ X86_SHLD16mrCL, X86_REG_CL },
{ X86_SHRD16mrCL, X86_REG_CL },
{ X86_SHLD32mrCL, X86_REG_CL },
{ X86_SHRD32mrCL, X86_REG_CL },
{ X86_SHLD64mrCL, X86_REG_CL },
{ X86_SHRD64mrCL, X86_REG_CL },
{ X86_OUT8ir, X86_REG_AL },
{ X86_OUT16ir, X86_REG_AX },
{ X86_OUT32ir, X86_REG_EAX },
#ifndef CAPSTONE_X86_REDUCE
{ X86_SKINIT, X86_REG_EAX },
{ X86_INVLPGA32, X86_REG_EAX },
{ X86_VMRUN32, X86_REG_EAX },
{ X86_VMRUN64, X86_REG_RAX },
{ X86_VMLOAD32, X86_REG_EAX },
{ X86_FNSTSW16r, X86_REG_AX },
{ X86_INVLPGA64, X86_REG_RAX },
{ X86_VMLOAD64, X86_REG_RAX },
{ X86_VMSAVE32, X86_REG_EAX },
{ X86_VMSAVE64, X86_REG_RAX },
{ X86_VMLOAD64, X86_REG_RAX },
{ X86_FNSTSW16r, X86_REG_AX },
{ X86_ADD_FrST0, X86_REG_ST0 },
{ X86_SUB_FrST0, X86_REG_ST0 },
{ X86_SUBR_FrST0, X86_REG_ST0 },
{ X86_MUL_FrST0, X86_REG_ST0 },
{ X86_DIV_FrST0, X86_REG_ST0 },
{ X86_DIVR_FrST0, X86_REG_ST0 },
#endif
};
static struct insn_reg insn_regs_intel[] = {
{ X86_OUTSB, X86_REG_DX },
{ X86_OUTSW, X86_REG_DX },
{ X86_OUTSL, X86_REG_DX },
{ X86_MOV16ao16, X86_REG_AX }, // 16-bit A1 1020 // mov ax, word ptr [0x2010]
{ X86_MOV32ao32, X86_REG_EAX }, // 32-bit A1 10203040 // mov eax, dword ptr [0x40302010]
{ X86_MOV64ao32, X86_REG_RAX }, // 64-bit 48 8B04 10203040 // mov rax, qword ptr [0x40302010]
{ X86_LODSQ, X86_REG_RAX },
{ X86_OR32i32, X86_REG_EAX },
{ X86_SUB32i32, X86_REG_EAX },
@ -47358,24 +47366,20 @@ static struct insn_reg insn_regs_intel[] = {
{ X86_XCHG64ar, X86_REG_RAX },
{ X86_LODSB, X86_REG_AL },
{ X86_AND32i32, X86_REG_EAX },
{ X86_MOV32o32a_16, X86_REG_EAX },
{ X86_IN16ri, X86_REG_AX },
{ X86_CMP64i32, X86_REG_RAX },
{ X86_XOR32i32, X86_REG_EAX },
{ X86_XCHG16ar, X86_REG_AX },
{ X86_LODSW, X86_REG_AX },
{ X86_AND16i16, X86_REG_AX },
{ X86_MOV64o64a, X86_REG_RAX },
{ X86_ADC16i16, X86_REG_AX },
{ X86_XCHG32ar64, X86_REG_EAX },
{ X86_ADC8i8, X86_REG_AL },
{ X86_MOV64o16a, X86_REG_AX },
{ X86_CMP32i32, X86_REG_EAX },
{ X86_AND8i8, X86_REG_AL },
{ X86_SCASW, X86_REG_AX },
{ X86_XOR8i8, X86_REG_AL },
{ X86_SUB16i16, X86_REG_AX },
{ X86_MOV8o8a, X86_REG_AL },
{ X86_OR16i16, X86_REG_AX },
{ X86_XCHG32ar, X86_REG_EAX },
{ X86_SBB8i8, X86_REG_AL },
@ -47391,9 +47395,6 @@ static struct insn_reg insn_regs_intel[] = {
{ X86_IN8ri, X86_REG_AL },
{ X86_TEST16i16, X86_REG_AX },
{ X86_SCASL, X86_REG_EAX },
{ X86_MOV16o16a_16, X86_REG_AX },
{ X86_MOV32o32a, X86_REG_EAX },
{ X86_MOV8o8a_16, X86_REG_AL },
{ X86_SUB8i8, X86_REG_AL },
{ X86_ADD8i8, X86_REG_AL },
{ X86_OR64i32, X86_REG_RAX },
@ -47401,10 +47402,7 @@ static struct insn_reg insn_regs_intel[] = {
{ X86_SBB64i32, X86_REG_RAX },
{ X86_ADD16i16, X86_REG_AX },
{ X86_XOR16i16, X86_REG_AX },
{ X86_MOV64o32a, X86_REG_EAX },
{ X86_AND64i32, X86_REG_RAX },
{ X86_MOV64o8a, X86_REG_AL },
{ X86_MOV16o16a, X86_REG_AX },
{ X86_LODSL, X86_REG_EAX },
{ X86_CMP8i8, X86_REG_AL },
{ X86_ADC64i32, X86_REG_RAX },
@ -47446,15 +47444,31 @@ static struct insn_reg insn_regs_intel[] = {
#ifndef CAPSTONE_X86_REDUCE
{ X86_SKINIT, X86_REG_EAX },
{ X86_INVLPGA32, X86_REG_EAX },
{ X86_VMRUN32, X86_REG_EAX },
{ X86_VMRUN64, X86_REG_RAX },
{ X86_VMLOAD32, X86_REG_EAX },
{ X86_FNSTSW16r, X86_REG_AX },
{ X86_INVLPGA64, X86_REG_RAX },
{ X86_VMLOAD64, X86_REG_RAX },
{ X86_VMSAVE32, X86_REG_EAX },
{ X86_VMSAVE64, X86_REG_RAX },
{ X86_VMLOAD64, X86_REG_RAX },
{ X86_FNSTSW16r, X86_REG_AX },
{ X86_CMOVB_F, X86_REG_ST0 },
{ X86_CMOVBE_F, X86_REG_ST0 },
{ X86_CMOVE_F, X86_REG_ST0 },
{ X86_CMOVP_F, X86_REG_ST0 },
{ X86_CMOVNB_F, X86_REG_ST0 },
{ X86_CMOVNBE_F, X86_REG_ST0 },
{ X86_CMOVNE_F, X86_REG_ST0 },
{ X86_CMOVNP_F, X86_REG_ST0 },
{ X86_ST_FXCHST0r, X86_REG_ST0 },
{ X86_ST_FXCHST0r_alt, X86_REG_ST0 },
{ X86_ST_FCOMST0r, X86_REG_ST0 },
{ X86_ST_FCOMPST0r, X86_REG_ST0 },
{ X86_ST_FCOMPST0r_alt, X86_REG_ST0 },
{ X86_ST_FPST0r, X86_REG_ST0 },
{ X86_ST_FPST0r_alt, X86_REG_ST0 },
{ X86_ST_FPNCEST0r, X86_REG_ST0 },
#endif
};