diff --git a/qemu/target/i386/translate.c b/qemu/target/i386/translate.c index 357ae9c1..60a73bf6 100644 --- a/qemu/target/i386/translate.c +++ b/qemu/target/i386/translate.c @@ -6105,12 +6105,21 @@ static target_ulong disas_insn(DisasContext *s, CPUState *cpu) break; case 0xc6: case 0xc7: /* mov Ev, Iv */ + // Unicorn: Altered to handle illegal opcodes ot = mo_b_d(b, dflag); modrm = x86_ldub_code(env, s); mod = (modrm >> 6) & 3; + reg = ((modrm >> 3) & 7) | rex_r; if (mod != 3) { + if (reg != 0) { + goto illegal_op; + } s->rip_offset = insn_const_size(ot); gen_lea_modrm(env, s, modrm); + } else { + if (reg != 0 && reg != 7) { + goto illegal_op; + } } val = insn_get(env, s, ot); tcg_gen_movi_tl(tcg_ctx, cpu_T0, val);