VirtualBox

Changeset 97138 in vbox for trunk/src/VBox/VMM


Ignore:
Timestamp:
Oct 13, 2022 3:20:45 PM (2 years ago)
Author:
vboxsync
Message:

IEM: Make unsupported (not recommended to be used) forms of MOVSXD visibly fail.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMAll/IEMAllInstructionsOneByte.cpp.h

    r96933 r97138  
    20612061    uint8_t bRm; IEM_OPCODE_GET_NEXT_U8(&bRm);
    20622062
    2063     if (IEM_IS_MODRM_REG_MODE(bRm))
    2064     {
    2065         /*
    2066          * Register to register.
    2067          */
    2068         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2069         IEM_MC_BEGIN(0, 1);
    2070         IEM_MC_LOCAL(uint64_t, u64Value);
    2071         IEM_MC_FETCH_GREG_U32_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
    2072         IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Value);
    2073         IEM_MC_ADVANCE_RIP();
    2074         IEM_MC_END();
     2063    if (pVCpu->iem.s.fPrefixes & IEM_OP_PRF_SIZE_REX_W)
     2064    {
     2065        if (IEM_IS_MODRM_REG_MODE(bRm))
     2066        {
     2067            /*
     2068             * Register to register.
     2069             */
     2070            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     2071            IEM_MC_BEGIN(0, 1);
     2072            IEM_MC_LOCAL(uint64_t, u64Value);
     2073            IEM_MC_FETCH_GREG_U32_SX_U64(u64Value, IEM_GET_MODRM_RM(pVCpu, bRm));
     2074            IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Value);
     2075            IEM_MC_ADVANCE_RIP();
     2076            IEM_MC_END();
     2077        }
     2078        else
     2079        {
     2080            /*
     2081             * We're loading a register from memory.
     2082             */
     2083            IEM_MC_BEGIN(0, 2);
     2084            IEM_MC_LOCAL(uint64_t, u64Value);
     2085            IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
     2086            IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
     2087            IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
     2088            IEM_MC_FETCH_MEM_U32_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
     2089            IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Value);
     2090            IEM_MC_ADVANCE_RIP();
     2091            IEM_MC_END();
     2092        }
    20752093    }
    20762094    else
    2077     {
    2078         /*
    2079          * We're loading a register from memory.
    2080          */
    2081         IEM_MC_BEGIN(0, 2);
    2082         IEM_MC_LOCAL(uint64_t, u64Value);
    2083         IEM_MC_LOCAL(RTGCPTR, GCPtrEffDst);
    2084         IEM_MC_CALC_RM_EFF_ADDR(GCPtrEffDst, bRm, 0);
    2085         IEMOP_HLP_DONE_DECODING_NO_LOCK_PREFIX();
    2086         IEM_MC_FETCH_MEM_U32_SX_U64(u64Value, pVCpu->iem.s.iEffSeg, GCPtrEffDst);
    2087         IEM_MC_STORE_GREG_U64(IEM_GET_MODRM_REG(pVCpu, bRm), u64Value);
    2088         IEM_MC_ADVANCE_RIP();
    2089         IEM_MC_END();
    2090     }
     2095        AssertFailedReturn(VERR_IEM_INSTR_NOT_IMPLEMENTED);
     2096
    20912097    return VINF_SUCCESS;
    20922098}
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette