diff --git a/irdb-libs/libIRDB-core/src/operand_csx86.cpp b/irdb-libs/libIRDB-core/src/operand_csx86.cpp index 080c6ff412cebe07a121a3cb52041303fec7cd42..aa6135c2de87a44fd61f1534f6b9bdd0774cfa2e 100644 --- a/irdb-libs/libIRDB-core/src/operand_csx86.cpp +++ b/irdb-libs/libIRDB-core/src/operand_csx86.cpp @@ -464,9 +464,14 @@ bool DecodedOperandCapstoneX86_t::hasBaseRegister() const bool DecodedOperandCapstoneX86_t::hasIndexRegister() const { - const auto the_insn=static_cast<cs_insn*>(my_insn.get()); - const auto &op = (the_insn->detail->x86.operands[op_num]); - return isMemory() && op.mem.index!=X86_REG_INVALID; + const auto the_insn=static_cast<cs_insn*>(my_insn.get()); + const auto &op = (the_insn->detail->x86.operands[op_num]); + + const auto index_reg_is_valid = + op.mem.index != X86_REG_INVALID && + op.mem.index != X86_REG_EIZ && + op.mem.index != X86_REG_RIZ; + return isMemory() && index_reg_is_valid; } uint32_t DecodedOperandCapstoneX86_t::getBaseRegister() const