diff --git a/arch/x86/lib/insn.c b/arch/x86/lib/insn.c index 1313ae6b478b6c439741ee032a8c33b86868ee2c..5ea00ddc18251ecb4821a904a060c136d9fa7a1a 100644 --- a/arch/x86/lib/insn.c +++ b/arch/x86/lib/insn.c @@ -164,6 +164,12 @@ void insn_get_prefixes(struct insn *insn) /* VEX.W overrides opnd_size */ insn->opnd_bytes = 8; } else { + /* + * For VEX2, fake VEX3-like byte#2. + * Makes it easier to decode vex.W, vex.vvvv, + * vex.L and vex.pp. Masking with 0x7f sets vex.W == 0. + */ + insn->vex_prefix.bytes[2] = b2 & 0x7f; insn->vex_prefix.nbytes = 2; insn->next_byte += 2; }