instrs: Enforce memory for VSIB encodings
This commit is contained in:
8
decode.c
8
decode.c
@@ -198,10 +198,6 @@ decode_modrm(const uint8_t* buffer, int len, DecodeMode mode, FdInstr* instr,
|
|||||||
uint8_t mod_reg = (modrm & 0x38) >> 3;
|
uint8_t mod_reg = (modrm & 0x38) >> 3;
|
||||||
uint8_t rm = modrm & 0x07;
|
uint8_t rm = modrm & 0x07;
|
||||||
|
|
||||||
// VSIB must have a memory operand with SIB byte.
|
|
||||||
if (UNLIKELY(vsib) && (rm != 4 || mod == 3))
|
|
||||||
return FD_ERR_UD;
|
|
||||||
|
|
||||||
bool is_seg = UNLIKELY(instr->type == FDI_MOV_G2S || instr->type == FDI_MOV_S2G);
|
bool is_seg = UNLIKELY(instr->type == FDI_MOV_G2S || instr->type == FDI_MOV_S2G);
|
||||||
bool is_cr = UNLIKELY(instr->type == FDI_MOV_CR);
|
bool is_cr = UNLIKELY(instr->type == FDI_MOV_CR);
|
||||||
bool is_dr = UNLIKELY(instr->type == FDI_MOV_DR);
|
bool is_dr = UNLIKELY(instr->type == FDI_MOV_DR);
|
||||||
@@ -249,6 +245,10 @@ decode_modrm(const uint8_t* buffer, int len, DecodeMode mode, FdInstr* instr,
|
|||||||
return off;
|
return off;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// VSIB must have a memory operand with SIB byte.
|
||||||
|
if (UNLIKELY(vsib) && rm != 4)
|
||||||
|
return FD_ERR_UD;
|
||||||
|
|
||||||
// SIB byte
|
// SIB byte
|
||||||
uint8_t scale = 0;
|
uint8_t scale = 0;
|
||||||
uint8_t idx = 4;
|
uint8_t idx = 4;
|
||||||
|
|||||||
16
instrs.txt
16
instrs.txt
@@ -1136,14 +1136,14 @@ VEX.66.W0.0f388c RVM XMM XMM XMM - VPMASKMOVD
|
|||||||
VEX.66.W1.0f388c RVM XMM XMM XMM - VPMASKMOVQ
|
VEX.66.W1.0f388c RVM XMM XMM XMM - VPMASKMOVQ
|
||||||
VEX.66.W0.0f388e MVR XMM XMM XMM - VPMASKMOVD
|
VEX.66.W0.0f388e MVR XMM XMM XMM - VPMASKMOVD
|
||||||
VEX.66.W1.0f388e MVR XMM XMM XMM - VPMASKMOVQ
|
VEX.66.W1.0f388e MVR XMM XMM XMM - VPMASKMOVQ
|
||||||
VEX.66.W0.0f3890 RMV XMM XMM XMM - VPGATHERDD VSIB
|
VEX.66.W0.0f3890 RMV XMM MEMV XMM - VPGATHERDD VSIB
|
||||||
VEX.66.W1.0f3890 RMV XMM XMM XMM - VPGATHERDQ VSIB
|
VEX.66.W1.0f3890 RMV XMM MEMV XMM - VPGATHERDQ VSIB
|
||||||
VEX.66.W0.0f3891 RMV XMM XMM XMM - VPGATHERQD VSIB
|
VEX.66.W0.0f3891 RMV XMM MEMV XMM - VPGATHERQD VSIB
|
||||||
VEX.66.W1.0f3891 RMV XMM XMM XMM - VPGATHERQQ VSIB
|
VEX.66.W1.0f3891 RMV XMM MEMV XMM - VPGATHERQQ VSIB
|
||||||
VEX.66.W0.0f3892 RMV XMM XMM XMM - VGATHERDPS VSIB
|
VEX.66.W0.0f3892 RMV XMM MEMV XMM - VGATHERDPS VSIB
|
||||||
VEX.66.W1.0f3892 RMV XMM XMM XMM - VGATHERDPD VSIB
|
VEX.66.W1.0f3892 RMV XMM MEMV XMM - VGATHERDPD VSIB
|
||||||
VEX.66.W0.0f3893 RMV XMM XMM XMM - VGATHERQPS VSIB
|
VEX.66.W0.0f3893 RMV XMM MEMV XMM - VGATHERQPS VSIB
|
||||||
VEX.66.W1.0f3893 RMV XMM XMM XMM - VGATHERQPD VSIB
|
VEX.66.W1.0f3893 RMV XMM MEMV XMM - VGATHERQPD VSIB
|
||||||
VEX.66.W0.0f3896 RVM XMM XMM XMM - VFMADDADD132PS
|
VEX.66.W0.0f3896 RVM XMM XMM XMM - VFMADDADD132PS
|
||||||
VEX.66.W1.0f3896 RVM XMM XMM XMM - VFMADDADD132PD
|
VEX.66.W1.0f3896 RVM XMM XMM XMM - VFMADDADD132PD
|
||||||
VEX.66.W0.0f3897 RVM XMM XMM XMM - VFMSUBADD132PS
|
VEX.66.W0.0f3897 RVM XMM XMM XMM - VFMSUBADD132PS
|
||||||
|
|||||||
Reference in New Issue
Block a user