VirtualBox

忽略:
時間撮記:
2008-4-25 上午08:23:14 (17 年 以前)
作者:
vboxsync
訊息:

Disassembler fixes + testcase for 64 bits

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Disassembler/DisasmReg.cpp

    r8364 r8377  
    188188
    189189    if (subtype == OP_PARM_v)
    190     {
    191190        subtype = (pCpu->opmode == CPUMODE_32BIT) ? OP_PARM_d : OP_PARM_w;
    192     }
    193191
    194192    switch(subtype)
     
    476474    memset(pParamVal, 0, sizeof(*pParamVal));
    477475
    478     if (pParam->flags & (USE_BASE|USE_INDEX|USE_DISPLACEMENT32|USE_DISPLACEMENT16|USE_DISPLACEMENT8))
     476    if (pParam->flags & (USE_BASE|USE_INDEX|USE_DISPLACEMENT32|USE_DISPLACEMENT16|USE_DISPLACEMENT8|USE_RIPDISPLACEMENT32))
    479477    {
    480478        // Effective address
     
    528526        if (pParam->flags & USE_DISPLACEMENT8)
    529527        {
    530             if (pCpu->mode & CPUMODE_32BIT)
     528            if (pCpu->mode == CPUMODE_32BIT)
    531529                pParamVal->val.val32 += (int32_t)pParam->disp8;
    532530            else
     
    536534        if (pParam->flags & USE_DISPLACEMENT16)
    537535        {
    538             if (pCpu->mode & CPUMODE_32BIT)
     536            if (pCpu->mode == CPUMODE_32BIT)
    539537                pParamVal->val.val32 += (int32_t)pParam->disp16;
    540538            else
     
    544542        if (pParam->flags & USE_DISPLACEMENT32)
    545543        {
    546             if (pCpu->mode & CPUMODE_32BIT)
     544            if (pCpu->mode == CPUMODE_32BIT)
    547545                pParamVal->val.val32 += pParam->disp32;
     546            else
     547                AssertFailed();
     548        }
     549        else
     550        if (pParam->flags & USE_RIPDISPLACEMENT32)
     551        {
     552            if (pCpu->mode == CPUMODE_64BIT)
     553                pParamVal->val.val64 += pParam->disp32 + pCtx->rip;
    548554            else
    549555                AssertFailed();
     
    597603            pParamVal->type = PARMTYPE_REGISTER;
    598604        }
     605        Assert(!(pParam->flags & USE_IMMEDIATE));
     606        return VINF_SUCCESS;
    599607    }
    600608
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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