VirtualBox

Changeset 101541 in vbox


Ignore:
Timestamp:
Oct 22, 2023 2:55:27 AM (19 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
159618
Message:

DIS,VMM,DBGC,IPRT,++: Some disassembler tweaks and TB disassembly work. [build fix, missed bits] bugref:10371 bugref:9898

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/HostDrivers/Support/posix/SUPR3HardenedMain-posix.cpp

    r101540 r101541  
    247247    if (   RT_FAILURE(rc)
    248248        || Dis.pCurInstr->uOpcode != OP_JMP
    249         || !(Dis.x86.ModRM.Bits.Mod == 0 && Dis.arch.x86.ModRM.Bits.Rm == 5 /* wrt RIP */))
     249        || !(Dis.x86.ModRM.Bits.Mod == 0 && Dis.x86.ModRM.Bits.Rm == 5 /* wrt RIP */))
    250250        return NULL;
    251251
    252252    /* Extract start address. */
    253     pbSym = (pbSym + cbInstr + Dis.Param1.arch.x86.uDisp.i32);
     253    pbSym = (pbSym + cbInstr + Dis.Param1.x86.uDisp.i32);
    254254    pbSym = (uint8_t *)*((uintptr_t *)pbSym);
    255255# else
     
    360360            || (   Dis.pCurInstr->fOpType & DISOPTYPE_CONTROLFLOW
    361361                && Dis.pCurInstr->uOpcode != OP_CALL)
    362             || (   Dis.arch.x86.ModRM.Bits.Mod == 0
    363                 && Dis.arch.x86.ModRM.Bits.Rm  == 5 /* wrt RIP */
     362            || (   Dis.x86.ModRM.Bits.Mod == 0
     363                && Dis.x86.ModRM.Bits.Rm  == 5 /* wrt RIP */
    364364                && Dis.pCurInstr->uOpcode != OP_MOV))
    365365            return VERR_SUPLIB_UNEXPECTED_INSTRUCTION;
    366366
    367         if (Dis.arch.x86.ModRM.Bits.Mod == 0 && Dis.arch.x86.ModRM.Bits.Rm == 5 /* wrt RIP */)
     367        if (Dis.x86.ModRM.Bits.Mod == 0 && Dis.x86.ModRM.Bits.Rm == 5 /* wrt RIP */)
    368368            cRipRelMovs++;
    369369        if (   Dis.pCurInstr->uOpcode == OP_CALL
     
    418418            return VERR_SUPLIB_UNEXPECTED_INSTRUCTION;
    419419
    420         if (   Dis.arch.x86.ModRM.Bits.Mod == 0
    421             && Dis.arch.x86.ModRM.Bits.Rm  == 5 /* wrt RIP */
     420        if (   Dis.x86.ModRM.Bits.Mod == 0
     421            && Dis.x86.ModRM.Bits.Rm  == 5 /* wrt RIP */
    422422            && Dis.pCurInstr->uOpcode == OP_MOV)
    423423        {
     
    427427                return VERR_SUPLIB_UNEXPECTED_INSTRUCTION;
    428428
    429             uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis.Param2.arch.x86.uDisp.i32;
     429            uintptr_t uAddr = (uintptr_t)&pbTarget[offInsn + cbInstr] + (intptr_t)Dis.Param2.x86.uDisp.i32;
    430430
    431431            if (fConvRipRelMovs)
     
    437437
    438438                *pbPatchMem++ = 0x48;
    439                 *pbPatchMem++ = 0xb8 + Dis.Param1.arch.x86.Base.idxGenReg;
     439                *pbPatchMem++ = 0xb8 + Dis.Param1.x86.Base.idxGenReg;
    440440                *(uintptr_t *)pbPatchMem = uAddr;
    441441                pbPatchMem   += sizeof(uintptr_t);
     
    443443                *pbPatchMem++ = 0x48;
    444444                *pbPatchMem++ = 0x8b;
    445                 *pbPatchMem++ = (Dis.Param1.arch.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | Dis.Param1.arch.x86.Base.idxGenReg;
     445                *pbPatchMem++ = (Dis.Param1.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | Dis.Param1.x86.Base.idxGenReg;
    446446            }
    447447            else
     
    453453                *pbPatchMem++ = 0x48;
    454454                *pbPatchMem++ = 0x8b;
    455                 *pbPatchMem++ = (Dis.Param1.arch.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | 5;
     455                *pbPatchMem++ = (Dis.Param1.x86.Base.idxGenReg << X86_MODRM_REG_SHIFT) | 5;
    456456                *(int32_t *)pbPatchMem = (int32_t)iDispNew;
    457457                pbPatchMem   += sizeof(int32_t);
Note: See TracChangeset for help on using the changeset viewer.

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