Lines Matching refs:pParam

203 DISDECL(int) DISGetParamSize(PCDISSTATE pDis, PCDISOPPARAM pParam)
205 unsigned subtype = OP_PARM_VSUBTYPE(pParam->fParam);
251 if (pParam->cb)
252 return pParam->cb;
259 DISDECL(DISSELREG) DISDetectSegReg(PCDISSTATE pDis, PCDISOPPARAM pParam)
266 if (pParam->fUse & (DISUSE_REG_GEN32|DISUSE_REG_GEN64|DISUSE_REG_GEN16))
272 if (pParam->Base.idxGenReg == DISGREG_ESP || pParam->Base.idxGenReg == DISGREG_EBP)
486 * Returns the value of the parameter in pParam
491 * @param pParam Pointer to the parameter to parse
498 DISDECL(int) DISQueryParamVal(PCPUMCTXCORE pCtx, PCDISSTATE pDis, PCDISOPPARAM pParam, PDISQPVPARAMVAL pParamVal, DISQPVWHICH parmtype)
502 if (DISUSE_IS_EFFECTIVE_ADDR(pParam->fUse))
506 pParamVal->size = pParam->cb;
508 if (pParam->fUse & DISUSE_BASE)
510 if (pParam->fUse & DISUSE_REG_GEN8)
513 if (RT_FAILURE(DISFetchReg8(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
516 if (pParam->fUse & DISUSE_REG_GEN16)
519 if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
522 if (pParam->fUse & DISUSE_REG_GEN32)
525 if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
528 if (pParam->fUse & DISUSE_REG_GEN64)
531 if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
540 if (pParam->fUse & DISUSE_INDEX)
542 if (pParam->fUse & DISUSE_REG_GEN16)
547 if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Index.idxGenReg, &val16))) return VERR_INVALID_PARAMETER;
549 Assert(!(pParam->fUse & DISUSE_SCALE)); /* shouldn't be possible in 16 bits mode */
554 if (pParam->fUse & DISUSE_REG_GEN32)
559 if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Index.idxGenReg, &val32))) return VERR_INVALID_PARAMETER;
561 if (pParam->fUse & DISUSE_SCALE)
562 val32 *= pParam->uScale;
567 if (pParam->fUse & DISUSE_REG_GEN64)
572 if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Index.idxGenReg, &val64))) return VERR_INVALID_PARAMETER;
574 if (pParam->fUse & DISUSE_SCALE)
575 val64 *= pParam->uScale;
583 if (pParam->fUse & DISUSE_DISPLACEMENT8)
586 pParamVal->val.val32 += (int32_t)pParam->uDisp.i8;
589 pParamVal->val.val64 += (int64_t)pParam->uDisp.i8;
591 pParamVal->val.val16 += (int16_t)pParam->uDisp.i8;
594 if (pParam->fUse & DISUSE_DISPLACEMENT16)
597 pParamVal->val.val32 += (int32_t)pParam->uDisp.i16;
600 pParamVal->val.val64 += (int64_t)pParam->uDisp.i16;
602 pParamVal->val.val16 += pParam->uDisp.i16;
605 if (pParam->fUse & DISUSE_DISPLACEMENT32)
608 pParamVal->val.val32 += pParam->uDisp.i32;
610 pParamVal->val.val64 += pParam->uDisp.i32;
613 if (pParam->fUse & DISUSE_DISPLACEMENT64)
616 pParamVal->val.val64 += pParam->uDisp.i64;
619 if (pParam->fUse & DISUSE_RIPDISPLACEMENT32)
623 pParamVal->val.val64 += pParam->uDisp.i32 + pCtx->rip + pDis->cbInstr;
628 if (pParam->fUse & (DISUSE_REG_GEN8|DISUSE_REG_GEN16|DISUSE_REG_GEN32|DISUSE_REG_GEN64|DISUSE_REG_FP|DISUSE_REG_MMX|DISUSE_REG_XMM|DISUSE_REG_CR|DISUSE_REG_DBG|DISUSE_REG_SEG|DISUSE_REG_TEST))
634 pParamVal->size = pParam->cb;
641 if (pParam->fUse & DISUSE_REG_GEN8)
645 if (RT_FAILURE(DISFetchReg8(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;
648 if (pParam->fUse & DISUSE_REG_GEN16)
652 if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;
655 if (pParam->fUse & DISUSE_REG_GEN32)
659 if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;
662 if (pParam->fUse & DISUSE_REG_GEN64)
666 if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;
673 Assert(!(pParam->fUse & DISUSE_IMMEDIATE));
677 if (pParam->fUse & DISUSE_IMMEDIATE)
680 if (pParam->fUse & (DISUSE_IMMEDIATE8|DISUSE_IMMEDIATE8_REL))
683 if (pParam->cb == 2)
686 pParamVal->val.val16 = (uint8_t)pParam->uValue;
691 pParamVal->val.val8 = (uint8_t)pParam->uValue;
695 if (pParam->fUse & (DISUSE_IMMEDIATE16|DISUSE_IMMEDIATE16_REL|DISUSE_IMMEDIATE_ADDR_0_16|DISUSE_IMMEDIATE16_SX8))
699 pParamVal->val.val16 = (uint16_t)pParam->uValue;
700 AssertMsg(pParamVal->size == pParam->cb || ((pParam->cb == 1) && (pParam->fUse & DISUSE_IMMEDIATE16_SX8)), ("pParamVal->size %d vs %d EIP=%RX32\n", pParamVal->size, pParam->cb, pCtx->eip) );
703 if (pParam->fUse & (DISUSE_IMMEDIATE32|DISUSE_IMMEDIATE32_REL|DISUSE_IMMEDIATE_ADDR_0_32|DISUSE_IMMEDIATE32_SX8))
707 pParamVal->val.val32 = (uint32_t)pParam->uValue;
708 Assert(pParamVal->size == pParam->cb || ((pParam->cb == 1) && (pParam->fUse & DISUSE_IMMEDIATE32_SX8)) );
711 if (pParam->fUse & (DISUSE_IMMEDIATE64 | DISUSE_IMMEDIATE64_REL | DISUSE_IMMEDIATE64_SX8))
715 pParamVal->val.val64 = pParam->uValue;
716 Assert(pParamVal->size == pParam->cb || ((pParam->cb == 1) && (pParam->fUse & DISUSE_IMMEDIATE64_SX8)) );
719 if (pParam->fUse & (DISUSE_IMMEDIATE_ADDR_16_16))
723 pParamVal->val.farptr.sel = (uint16_t)RT_LOWORD(pParam->uValue >> 16);
724 pParamVal->val.farptr.offset = (uint32_t)RT_LOWORD(pParam->uValue);
725 Assert(pParamVal->size == pParam->cb);
728 if (pParam->fUse & (DISUSE_IMMEDIATE_ADDR_16_32))
732 pParamVal->val.farptr.sel = (uint16_t)RT_LOWORD(pParam->uValue >> 32);
733 pParamVal->val.farptr.offset = (uint32_t)(pParam->uValue & 0xFFFFFFFF);
734 Assert(pParam->cb == 8);
741 * Returns the pointer to a register of the parameter in pParam. We need this
749 * @param pParam Pointer to the parameter to parse
756 DISDECL(int) DISQueryParamRegPtr(PCPUMCTXCORE pCtx, PCDISSTATE pDis, PCDISOPPARAM pParam, void **ppReg, size_t *pcbSize)
759 if (pParam->fUse & (DISUSE_REG_GEN8|DISUSE_REG_GEN16|DISUSE_REG_GEN32|DISUSE_REG_FP|DISUSE_REG_MMX|DISUSE_REG_XMM|DISUSE_REG_CR|DISUSE_REG_DBG|DISUSE_REG_SEG|DISUSE_REG_TEST))
761 if (pParam->fUse & DISUSE_REG_GEN8)
764 if (RT_SUCCESS(DISPtrReg8(pCtx, pParam->Base.idxGenReg, &pu8Reg)))
772 if (pParam->fUse & DISUSE_REG_GEN16)
775 if (RT_SUCCESS(DISPtrReg16(pCtx, pParam->Base.idxGenReg, &pu16Reg)))
783 if (pParam->fUse & DISUSE_REG_GEN32)
786 if (RT_SUCCESS(DISPtrReg32(pCtx, pParam->Base.idxGenReg, &pu32Reg)))
794 if (pParam->fUse & DISUSE_REG_GEN64)
797 if (RT_SUCCESS(DISPtrReg64(pCtx, pParam->Base.idxGenReg, &pu64Reg)))