Lines Matching refs:pCpu

471 int patmPatchGenDuplicate(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC)
473 uint32_t const cbInstrShutUpGcc = pCpu->cbInstr;
716 int patmPatchGenCall(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCurInstrGC, RTRCPTR pTargetGC, bool fIndirect)
738 Assert(pCpu->Param1.cb == 4);
739 Assert(OP_PARM_VTYPE(pCpu->pCurInstr->fParam1) != OP_PARM_J);
746 if (pCpu->fPrefix & DISPREFIX_SEG)
747 pPB[offset++] = DISQuerySegPrefixByte(pCpu);
749 pPB[offset++] = MAKE_MODRM(pCpu->ModRM.Bits.Mod, 6 /* group 5 */, pCpu->ModRM.Bits.Rm);
751 if (pCpu->fPrefix & DISPREFIX_OPSIZE)
753 if (pCpu->fPrefix & DISPREFIX_SEG)
756 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTRCPTR)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->cbInstr - i);
758 offset += (pCpu->cbInstr - i);
764 Assert(OP_PARM_VTYPE(pCpu->pCurInstr->fParam1) == OP_PARM_J);
769 Log(("PatchGenCall from %RRv (next=%RRv) to %RRv\n", pCurInstrGC, pCurInstrGC + pCpu->cbInstr, pTargetGC));
794 callInfo.pReturnGC = pCurInstrGC + pCpu->cbInstr;
815 * @param pCpu Disassembly state
818 int patmPatchGenJump(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCurInstrGC)
835 Assert(pCpu->Param1.cb == 4);
836 Assert(OP_PARM_VTYPE(pCpu->pCurInstr->fParam1) != OP_PARM_J);
843 if (pCpu->fPrefix & DISPREFIX_SEG)
844 pPB[offset++] = DISQuerySegPrefixByte(pCpu);
847 pPB[offset++] = MAKE_MODRM(pCpu->ModRM.Bits.Mod, 6 /* group 5 */, pCpu->ModRM.Bits.Rm);
849 if (pCpu->fPrefix & DISPREFIX_OPSIZE)
851 if (pCpu->fPrefix & DISPREFIX_SEG)
854 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTRCPTR)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->cbInstr - i);
856 offset += (pCpu->cbInstr - i);
871 callInfo.pReturnGC = pCurInstrGC + pCpu->cbInstr;
886 * @param pCpu Disassembly struct
890 int patmPatchGenRet(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RCPTRTYPE(uint8_t *) pCurInstrGC)
901 && pPatch->pTempInfo->uPatchRetParam1 == (uint32_t)pCpu->Param1.uValue) /* nr of bytes popped off the stack should be identical of course! */
903 Assert(pCpu->pCurInstr->uOpcode == OP_RETN);
930 rc = patmPatchGenDuplicate(pVM, pPatch, pCpu, pCurInstrGC);
935 pPatch->pTempInfo->uPatchRetParam1 = pCpu->Param1.uValue;
1194 int patmPatchGenMovDebug(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu)
1204 if (pCpu->pCurInstr->fParam1 == OP_PARM_Dd)
1210 Assert(pCpu->Param1.fUse & DISUSE_REG_DBG);
1211 Assert(pCpu->Param2.fUse & DISUSE_REG_GEN32);
1213 dbgreg = pCpu->Param1.Base.idxDbgReg;
1214 reg = pCpu->Param2.Base.idxGenReg;
1219 Assert(pCpu->Param1.fUse & DISUSE_REG_GEN32);
1220 Assert(pCpu->Param2.fUse & DISUSE_REG_DBG);
1223 reg = pCpu->Param1.Base.idxGenReg;
1224 dbgreg = pCpu->Param2.Base.idxDbgReg;
1244 int patmPatchGenMovControl(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu)
1254 if (pCpu->pCurInstr->fParam1 == OP_PARM_Cd)
1260 ctrlreg = pCpu->Param1.Base.idxCtrlReg;
1261 reg = pCpu->Param2.Base.idxGenReg;
1262 Assert(pCpu->Param1.fUse & DISUSE_REG_CR);
1263 Assert(pCpu->Param2.fUse & DISUSE_REG_GEN32);
1268 Assert(pCpu->Param1.fUse & DISUSE_REG_GEN32);
1269 Assert(pCpu->Param2.fUse & DISUSE_REG_CR);
1272 reg = pCpu->Param1.Base.idxGenReg;
1273 ctrlreg = pCpu->Param2.Base.idxCtrlReg;
1308 int patmPatchGenMovFromSS(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCurInstrGC)
1323 if (pCpu->fPrefix & DISPREFIX_OPSIZE)
1336 if (pCpu->fPrefix & DISPREFIX_OPSIZE)
1338 pPB[offset++] = 0x58 + pCpu->Param1.Base.idxGenReg;
1356 * @param pCpu Disassembly state
1359 int patmPatchGenSldtStr(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCurInstrGC)
1367 Assert(pCpu->fPrefix == DISPREFIX_NONE || pCpu->fPrefix == DISPREFIX_OPSIZE);
1371 if (pCpu->Param1.fUse == DISUSE_REG_GEN32 || pCpu->Param1.fUse == DISUSE_REG_GEN16)
1376 if (pCpu->fPrefix == DISPREFIX_OPSIZE)
1381 pPB[offset++] = MAKE_MODRM(0, pCpu->Param1.Base.idxGenReg, 5);
1382 if (pCpu->pCurInstr->uOpcode == OP_STR)
1407 if (pCpu->fPrefix == DISPREFIX_SEG)
1409 pPB[offset++] = DISQuerySegPrefixByte(pCpu);
1413 pPB[offset++] = MAKE_MODRM(pCpu->ModRM.Bits.Mod, DISGREG_EDX , pCpu->ModRM.Bits.Rm);
1416 if (pCpu->fPrefix == DISPREFIX_OPSIZE)
1418 if (pCpu->fPrefix == DISPREFIX_SEG)
1421 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTRCPTR)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->cbInstr - i);
1423 offset += (pCpu->cbInstr - i);
1427 if (pCpu->pCurInstr->uOpcode == OP_STR)
1457 * @param pCpu Disassembly state
1460 int patmPatchGenSxDT(PVM pVM, PPATCHINFO pPatch, DISCPUSTATE *pCpu, RTRCPTR pCurInstrGC)
1467 Assert(pCpu->fPrefix == DISPREFIX_NONE);
1472 switch (pCpu->pCurInstr->uOpcode)
1502 if (pCpu->fPrefix == DISPREFIX_SEG)
1504 pPB[offset++] = DISQuerySegPrefixByte(pCpu);
1508 pPB[offset++] = MAKE_MODRM(pCpu->ModRM.Bits.Mod, DISGREG_EDX , pCpu->ModRM.Bits.Rm);
1511 if (pCpu->fPrefix == DISPREFIX_OPSIZE)
1513 if (pCpu->fPrefix == DISPREFIX_SEG)
1515 rc = patmPatchReadBytes(pVM, &pPB[offset], (RTRCPTR)((RTGCUINTPTR32)pCurInstrGC + i), pCpu->cbInstr - i);
1517 offset += (pCpu->cbInstr - i);