VirtualBox

Changeset 55497 in vbox for trunk/src/VBox/Disassembler


Ignore:
Timestamp:
Apr 28, 2015 10:46:45 PM (10 years ago)
Author:
vboxsync
Message:

DIS: Improved DISUSE_RIPDISPLACEMENT32 formatting and symbol resolution.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp

    r53172 r55497  
    874874                            }
    875875
    876                             if (fBase || (fUse & DISUSE_INDEX))
     876                            int64_t off3 = off2;
     877                            if (fBase || (fUse & (DISUSE_INDEX | DISUSE_RIPDISPLACEMENT32)))
    877878                            {
    878                                 PUT_C(off2 >= 0 ? '+' : '-');
    879                                 if (off2 < 0)
    880                                     off2 = -off2;
     879                                PUT_C(off3 >= 0 ? '+' : '-');
     880                                if (off3 < 0)
     881                                    off3 = -off3;
    881882                            }
    882883                            if (fUse & DISUSE_DISPLACEMENT8)
    883                                 PUT_NUM_8( off2);
     884                                PUT_NUM_8( off3);
    884885                            else if (fUse & DISUSE_DISPLACEMENT16)
    885                                 PUT_NUM_16(off2);
     886                                PUT_NUM_16(off3);
    886887                            else if (fUse & DISUSE_DISPLACEMENT32)
    887                                 PUT_NUM_32(off2);
     888                                PUT_NUM_32(off3);
    888889                            else if (fUse & DISUSE_DISPLACEMENT64)
    889                                 PUT_NUM_64(off2);
     890                                PUT_NUM_64(off3);
    890891                            else
    891892                            {
    892                                 PUT_NUM_32(off2);
    893                                 PUT_SZ(" wrt rip"); //??
     893                                PUT_NUM_32(off3);
     894                                PUT_SZ(" wrt rip (");
     895                                off2 += pDis->uInstrAddr + pDis->cbInstr;
     896                                PUT_NUM_64(off2);
     897                                if (pfnGetSymbol)
     898                                    PUT_SYMBOL((pDis->fPrefix & DISPREFIX_SEG)
     899                                               ? DIS_FMT_SEL_FROM_REG(pDis->idxSegPrefix)
     900                                               : DIS_FMT_SEL_FROM_REG(DISSELREG_DS),
     901                                               pDis->uAddrMode == DISCPUMODE_64BIT
     902                                               ? (uint64_t)off2
     903                                               : pDis->uAddrMode == DISCPUMODE_32BIT
     904                                               ? (uint32_t)off2
     905                                               : (uint16_t)off2,
     906                                               " = ",
     907                                               ')');
     908                                else
     909                                    PUT_C(')');
    894910                            }
    895911                        }
     
    897913                        if (DISUSE_IS_EFFECTIVE_ADDR(fUse))
    898914                        {
    899                             if (pfnGetSymbol && !fBase && !(fUse & DISUSE_INDEX) && off2 != 0)
     915                            if (pfnGetSymbol && !fBase && !(fUse & (DISUSE_INDEX | DISUSE_RIPDISPLACEMENT32)) && off2 != 0)
    900916                                PUT_SYMBOL((pDis->fPrefix & DISPREFIX_SEG)
    901917                                           ? DIS_FMT_SEL_FROM_REG(pDis->idxSegPrefix)
     
    906922                                           ? (uint32_t)off2
    907923                                           : (uint16_t)off2,
    908                                            " (=", ')');
     924                                           " (=",
     925                                           ')');
    909926                            PUT_C(']');
    910927                        }
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