VirtualBox

Changeset 105724 in vbox for trunk/src/VBox/VMM/VMMR3


Ignore:
Timestamp:
Aug 19, 2024 1:27:44 PM (5 months ago)
Author:
vboxsync
Message:

Disassembler,VMM,HostDrivers,Debugger,MakeAlternativeSource: Convert DISSTATE::Param1,...,DISSTATE::Param4 to DISSTATE::aParams[4] for easier indexing, bugref:10394

Location:
trunk/src/VBox/VMM/VMMR3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/VMM/VMMR3/DBGFDisas.cpp

    r105352 r105724  
    609609        pDisState->pCurInstr = State.Dis.pCurInstr;
    610610        pDisState->cbInstr   = State.Dis.cbInstr;
    611         pDisState->Param1    = State.Dis.Param1;
    612         pDisState->Param2    = State.Dis.Param2;
    613         pDisState->Param3    = State.Dis.Param3;
    614         pDisState->Param4    = State.Dis.Param4;
     611        pDisState->Param1    = State.Dis.aParams[0];
     612        pDisState->Param2    = State.Dis.aParams[1];
     613        pDisState->Param3    = State.Dis.aParams[2];
     614        pDisState->Param4    = State.Dis.aParams[3];
    615615    }
    616616
  • trunk/src/VBox/VMM/VMMR3/HM.cpp

    r104511 r105724  
    23472347        pPatch->cbOp = cbOp;
    23482348
    2349         if (Dis.Param1.fUse == DISUSE_DISPLACEMENT32)
     2349        if (Dis.aParams[0].fUse == DISUSE_DISPLACEMENT32)
    23502350        {
    23512351            /* write. */
    2352             if (Dis.Param2.fUse == DISUSE_REG_GEN32)
     2352            if (Dis.aParams[1].fUse == DISUSE_REG_GEN32)
    23532353            {
    23542354                pPatch->enmType     = HMTPRINSTR_WRITE_REG;
    2355                 pPatch->uSrcOperand = Dis.Param2.x86.Base.idxGenReg;
    2356                 Log(("hmR3ReplaceTprInstr: HMTPRINSTR_WRITE_REG %u\n", Dis.Param2.x86.Base.idxGenReg));
     2355                pPatch->uSrcOperand = Dis.aParams[1].x86.Base.idxGenReg;
     2356                Log(("hmR3ReplaceTprInstr: HMTPRINSTR_WRITE_REG %u\n", Dis.aParams[1].x86.Base.idxGenReg));
    23572357            }
    23582358            else
    23592359            {
    2360                 Assert(Dis.Param2.fUse == DISUSE_IMMEDIATE32);
     2360                Assert(Dis.aParams[1].fUse == DISUSE_IMMEDIATE32);
    23612361                pPatch->enmType     = HMTPRINSTR_WRITE_IMM;
    2362                 pPatch->uSrcOperand = Dis.Param2.uValue;
    2363                 Log(("hmR3ReplaceTprInstr: HMTPRINSTR_WRITE_IMM %#llx\n", Dis.Param2.uValue));
     2362                pPatch->uSrcOperand = Dis.aParams[1].uValue;
     2363                Log(("hmR3ReplaceTprInstr: HMTPRINSTR_WRITE_IMM %#llx\n", Dis.aParams[1].uValue));
    23642364            }
    23652365            rc = PGMPhysSimpleWriteGCPtr(pVCpu, pCtx->rip, s_abVMMCall, sizeof(s_abVMMCall));
     
    23802380             *   shr eax, 4
    23812381             */
    2382             Assert(Dis.Param1.fUse == DISUSE_REG_GEN32);
    2383 
    2384             uint8_t  const idxMmioReg = Dis.Param1.x86.Base.idxGenReg;
     2382            Assert(Dis.aParams[0].fUse == DISUSE_REG_GEN32);
     2383
     2384            uint8_t  const idxMmioReg = Dis.aParams[0].x86.Base.idxGenReg;
    23852385            uint8_t  const cbOpMmio   = cbOp;
    23862386            uint64_t const uSavedRip  = pCtx->rip;
     
    23932393            if (    rc == VINF_SUCCESS
    23942394                &&  Dis.pCurInstr->uOpcode == OP_SHR
    2395                 &&  Dis.Param1.fUse == DISUSE_REG_GEN32
    2396                 &&  Dis.Param1.x86.Base.idxGenReg == idxMmioReg
    2397                 &&  Dis.Param2.fUse == DISUSE_IMMEDIATE8
    2398                 &&  Dis.Param2.uValue == 4
     2395                &&  Dis.aParams[0].fUse == DISUSE_REG_GEN32
     2396                &&  Dis.aParams[0].x86.Base.idxGenReg == idxMmioReg
     2397                &&  Dis.aParams[1].fUse == DISUSE_IMMEDIATE8
     2398                &&  Dis.aParams[1].uValue == 4
    23992399                &&  cbOpMmio + cbOp < sizeof(pVM->hm.s.aPatches[idx].aOpcode))
    24002400            {
     
    24122412                abInstr[1] = 0x0f;
    24132413                abInstr[2] = 0x20;
    2414                 abInstr[3] = 0xc0 | Dis.Param1.x86.Base.idxGenReg;
     2414                abInstr[3] = 0xc0 | Dis.aParams[0].x86.Base.idxGenReg;
    24152415                for (unsigned i = 4; i < pPatch->cbOp; i++)
    24162416                    abInstr[i] = 0x90;  /* nop */
     
    25252525        pPatch->enmType = HMTPRINSTR_JUMP_REPLACEMENT;
    25262526
    2527         if (Dis.Param1.fUse == DISUSE_DISPLACEMENT32)
     2527        if (Dis.aParams[0].fUse == DISUSE_DISPLACEMENT32)
    25282528        {
    25292529            /*
     
    25442544             * jmp return_address            [E9 return_address]
    25452545             */
    2546             bool fUsesEax = (Dis.Param2.fUse == DISUSE_REG_GEN32 && Dis.Param2.x86.Base.idxGenReg == DISGREG_EAX);
     2546            bool fUsesEax = (Dis.aParams[1].fUse == DISUSE_REG_GEN32 && Dis.aParams[1].x86.Base.idxGenReg == DISGREG_EAX);
    25472547
    25482548            aPatch[off++] = 0x51;    /* push ecx */
     
    25522552            aPatch[off++] = 0x31;    /* xor edx, edx */
    25532553            aPatch[off++] = 0xd2;
    2554             if (Dis.Param2.fUse == DISUSE_REG_GEN32)
     2554            if (Dis.aParams[1].fUse == DISUSE_REG_GEN32)
    25552555            {
    25562556                if (!fUsesEax)
    25572557                {
    25582558                    aPatch[off++] = 0x89;    /* mov eax, src_reg */
    2559                     aPatch[off++] = MAKE_MODRM(3, Dis.Param2.x86.Base.idxGenReg, DISGREG_EAX);
     2559                    aPatch[off++] = MAKE_MODRM(3, Dis.aParams[1].x86.Base.idxGenReg, DISGREG_EAX);
    25602560                }
    25612561            }
    25622562            else
    25632563            {
    2564                 Assert(Dis.Param2.fUse == DISUSE_IMMEDIATE32);
     2564                Assert(Dis.aParams[1].fUse == DISUSE_IMMEDIATE32);
    25652565                aPatch[off++] = 0xb8;    /* mov eax, immediate */
    2566                 *(uint32_t *)&aPatch[off] = Dis.Param2.uValue;
     2566                *(uint32_t *)&aPatch[off] = Dis.aParams[1].uValue;
    25672567                off += sizeof(uint32_t);
    25682568            }
     
    25942594             * jmp return_address            [E9 return_address]
    25952595             */
    2596             Assert(Dis.Param1.fUse == DISUSE_REG_GEN32);
    2597 
    2598             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_ECX)
     2596            Assert(Dis.aParams[0].fUse == DISUSE_REG_GEN32);
     2597
     2598            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_ECX)
    25992599                aPatch[off++] = 0x51;    /* push ecx */
    2600             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_EDX )
     2600            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_EDX )
    26012601                aPatch[off++] = 0x52;    /* push edx */
    2602             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_EAX)
     2602            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_EAX)
    26032603                aPatch[off++] = 0x50;    /* push eax */
    26042604
     
    26132613            aPatch[off++] = 0x32;
    26142614
    2615             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_EAX)
     2615            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_EAX)
    26162616            {
    26172617                aPatch[off++] = 0x89;    /* mov dst_reg, eax */
    2618                 aPatch[off++] = MAKE_MODRM(3, DISGREG_EAX, Dis.Param1.x86.Base.idxGenReg);
     2618                aPatch[off++] = MAKE_MODRM(3, DISGREG_EAX, Dis.aParams[0].x86.Base.idxGenReg);
    26192619            }
    26202620
    2621             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_EAX)
     2621            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_EAX)
    26222622                aPatch[off++] = 0x58;    /* pop eax */
    2623             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_EDX )
     2623            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_EDX )
    26242624                aPatch[off++] = 0x5a;    /* pop edx */
    2625             if (Dis.Param1.x86.Base.idxGenReg != DISGREG_ECX)
     2625            if (Dis.aParams[0].x86.Base.idxGenReg != DISGREG_ECX)
    26262626                aPatch[off++] = 0x59;    /* pop ecx */
    26272627        }
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