Changeset 41744 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Jun 15, 2012 2:29:09 AM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 78552
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r41743 r41744 643 643 { 644 644 pParam->fUse |= DISUSE_BASE | regtype; 645 pParam-> base.reg_gen= base;645 pParam->Base.idxGenReg = base; 646 646 } 647 647 return; /* Already fetched everything in ParseSIB; no size returned */ … … 742 742 { 743 743 pCpu->fPrefix &= ~DISPREFIX_LOCK; 744 pParam-> base.reg_ctrl= DISCREG_CR8;744 pParam->Base.idxCtrlReg = DISCREG_CR8; 745 745 } 746 746 else 747 pParam-> base.reg_ctrl= reg;747 pParam->Base.idxCtrlReg = reg; 748 748 return 0; 749 749 750 750 case OP_PARM_D: //debug register 751 751 pParam->fUse |= DISUSE_REG_DBG; 752 pParam-> base.reg_dbg = reg;752 pParam->Base.idxDbgReg = reg; 753 753 return 0; 754 754 … … 756 756 reg &= 7; /* REX.R has no effect here */ 757 757 pParam->fUse |= DISUSE_REG_MMX; 758 pParam-> base.reg_mmx= reg;758 pParam->Base.idxMmxReg = reg; 759 759 return 0; 760 760 … … 768 768 reg &= 7; /* REX.R has no effect here */ 769 769 pParam->fUse |= DISUSE_REG_TEST; 770 pParam-> base.reg_test= reg;770 pParam->Base.idxTestReg = reg; 771 771 return 0; 772 772 … … 779 779 case OP_PARM_V: //XMM register 780 780 pParam->fUse |= DISUSE_REG_XMM; 781 pParam-> base.reg_xmm= reg;781 pParam->Base.idxXmmReg = reg; 782 782 return 0; 783 783 } … … 1559 1559 { 1560 1560 /* Use 32-bit registers. */ 1561 pParam-> base.reg_gen= pParam->fParam - OP_PARM_REG_GEN32_START;1561 pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START; 1562 1562 pParam->fUse |= DISUSE_REG_GEN32; 1563 1563 pParam->cb = 4; … … 1567 1567 { 1568 1568 /* Use 64-bit registers. */ 1569 pParam-> base.reg_gen= pParam->fParam - OP_PARM_REG_GEN32_START;1569 pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START; 1570 1570 if ( (pOp->fOpType & DISOPTYPE_REXB_EXTENDS_OPREG) 1571 1571 && pParam == &pCpu->Param1 /* ugly assumption that it only applies to the first parameter */ 1572 1572 && (pCpu->fPrefix & DISPREFIX_REX) 1573 1573 && (pCpu->fRexPrefix & DISPREFIX_REX_FLAGS)) 1574 pParam-> base.reg_gen+= 8;1574 pParam->Base.idxGenReg += 8; 1575 1575 1576 1576 pParam->fUse |= DISUSE_REG_GEN64; … … 1580 1580 { 1581 1581 /* Use 16-bit registers. */ 1582 pParam-> base.reg_gen= pParam->fParam - OP_PARM_REG_GEN32_START;1582 pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN32_START; 1583 1583 pParam->fUse |= DISUSE_REG_GEN16; 1584 1584 pParam->cb = 2; … … 1590 1590 { 1591 1591 /* Segment ES..GS registers. */ 1592 pParam-> base.reg_seg = (DISSELREG)(pParam->fParam - OP_PARM_REG_SEG_START);1592 pParam->Base.idxSegReg = (DISSELREG)(pParam->fParam - OP_PARM_REG_SEG_START); 1593 1593 pParam->fUse |= DISUSE_REG_SEG; 1594 1594 pParam->cb = 2; … … 1598 1598 { 1599 1599 /* 16-bit AX..DI registers. */ 1600 pParam-> base.reg_gen= pParam->fParam - OP_PARM_REG_GEN16_START;1600 pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN16_START; 1601 1601 pParam->fUse |= DISUSE_REG_GEN16; 1602 1602 pParam->cb = 2; … … 1606 1606 { 1607 1607 /* 8-bit AL..DL, AH..DH registers. */ 1608 pParam-> base.reg_gen= pParam->fParam - OP_PARM_REG_GEN8_START;1608 pParam->Base.idxGenReg = pParam->fParam - OP_PARM_REG_GEN8_START; 1609 1609 pParam->fUse |= DISUSE_REG_GEN8; 1610 1610 pParam->cb = 1; … … 1616 1616 && (pCpu->fPrefix & DISPREFIX_REX) 1617 1617 && (pCpu->fRexPrefix & DISPREFIX_REX_FLAGS)) 1618 pParam-> base.reg_gen+= 8; /* least significant byte of R8-R15 */1618 pParam->Base.idxGenReg += 8; /* least significant byte of R8-R15 */ 1619 1619 } 1620 1620 } … … 1623 1623 { 1624 1624 /* FPU registers. */ 1625 pParam-> base.reg_fp= pParam->fParam - OP_PARM_REG_FP_START;1625 pParam->Base.idxFpuReg = pParam->fParam - OP_PARM_REG_FP_START; 1626 1626 pParam->fUse |= DISUSE_REG_FP; 1627 1627 pParam->cb = 10; … … 1642 1642 if (pCpu->uAddrMode == DISCPUMODE_32BIT) 1643 1643 { 1644 pParam-> base.reg_gen= DISGREG_ESI;1644 pParam->Base.idxGenReg = DISGREG_ESI; 1645 1645 pParam->fUse |= DISUSE_REG_GEN32; 1646 1646 } … … 1648 1648 if (pCpu->uAddrMode == DISCPUMODE_64BIT) 1649 1649 { 1650 pParam-> base.reg_gen= DISGREG_RSI;1650 pParam->Base.idxGenReg = DISGREG_RSI; 1651 1651 pParam->fUse |= DISUSE_REG_GEN64; 1652 1652 } 1653 1653 else 1654 1654 { 1655 pParam-> base.reg_gen= DISGREG_SI;1655 pParam->Base.idxGenReg = DISGREG_SI; 1656 1656 pParam->fUse |= DISUSE_REG_GEN16; 1657 1657 } … … 1667 1667 if (pCpu->uAddrMode == DISCPUMODE_32BIT) 1668 1668 { 1669 pParam-> base.reg_gen= DISGREG_ESI;1669 pParam->Base.idxGenReg = DISGREG_ESI; 1670 1670 pParam->fUse |= DISUSE_REG_GEN32; 1671 1671 } … … 1673 1673 if (pCpu->uAddrMode == DISCPUMODE_64BIT) 1674 1674 { 1675 pParam-> base.reg_gen= DISGREG_RSI;1675 pParam->Base.idxGenReg = DISGREG_RSI; 1676 1676 pParam->fUse |= DISUSE_REG_GEN64; 1677 1677 } 1678 1678 else 1679 1679 { 1680 pParam-> base.reg_gen= DISGREG_SI;1680 pParam->Base.idxGenReg = DISGREG_SI; 1681 1681 pParam->fUse |= DISUSE_REG_GEN16; 1682 1682 } … … 1692 1692 if (pCpu->uAddrMode == DISCPUMODE_32BIT) 1693 1693 { 1694 pParam-> base.reg_gen= DISGREG_EDI;1694 pParam->Base.idxGenReg = DISGREG_EDI; 1695 1695 pParam->fUse |= DISUSE_REG_GEN32; 1696 1696 } … … 1698 1698 if (pCpu->uAddrMode == DISCPUMODE_64BIT) 1699 1699 { 1700 pParam-> base.reg_gen= DISGREG_RDI;1700 pParam->Base.idxGenReg = DISGREG_RDI; 1701 1701 pParam->fUse |= DISUSE_REG_GEN64; 1702 1702 } 1703 1703 else 1704 1704 { 1705 pParam-> base.reg_gen= DISGREG_DI;1705 pParam->Base.idxGenReg = DISGREG_DI; 1706 1706 pParam->fUse |= DISUSE_REG_GEN16; 1707 1707 } … … 1717 1717 if (pCpu->uAddrMode == DISCPUMODE_32BIT) 1718 1718 { 1719 pParam-> base.reg_gen= DISGREG_EDI;1719 pParam->Base.idxGenReg = DISGREG_EDI; 1720 1720 pParam->fUse |= DISUSE_REG_GEN32; 1721 1721 } … … 1723 1723 if (pCpu->uAddrMode == DISCPUMODE_64BIT) 1724 1724 { 1725 pParam-> base.reg_gen= DISGREG_RDI;1725 pParam->Base.idxGenReg = DISGREG_RDI; 1726 1726 pParam->fUse |= DISUSE_REG_GEN64; 1727 1727 } 1728 1728 else 1729 1729 { 1730 pParam-> base.reg_gen= DISGREG_DI;1730 pParam->Base.idxGenReg = DISGREG_DI; 1731 1731 pParam->fUse |= DISUSE_REG_GEN16; 1732 1732 } … … 2341 2341 2342 2342 pParam->fUse |= DISUSE_REG_GEN8; 2343 pParam-> base.reg_gen= idx;2343 pParam->Base.idxGenReg = idx; 2344 2344 break; 2345 2345 … … 2348 2348 2349 2349 pParam->fUse |= DISUSE_REG_GEN16; 2350 pParam-> base.reg_gen= idx;2350 pParam->Base.idxGenReg = idx; 2351 2351 break; 2352 2352 … … 2355 2355 2356 2356 pParam->fUse |= DISUSE_REG_GEN32; 2357 pParam-> base.reg_gen= idx;2357 pParam->Base.idxGenReg = idx; 2358 2358 break; 2359 2359 2360 2360 case OP_PARM_q: 2361 2361 pParam->fUse |= DISUSE_REG_GEN64; 2362 pParam-> base.reg_gen= idx;2362 pParam->Base.idxGenReg = idx; 2363 2363 break; 2364 2364 … … 2375 2375 NOREF(pCpu); NOREF(pOp); 2376 2376 pParam->fUse |= DISUSE_REG_GEN16; 2377 pParam-> base.reg_gen= BaseModRMReg16[idx];2377 pParam->Base.idxGenReg = BaseModRMReg16[idx]; 2378 2378 if (idx < 4) 2379 2379 { … … 2395 2395 2396 2396 pParam->fUse |= DISUSE_REG_SEG; 2397 pParam-> base.reg_seg = (DISSELREG)idx;2397 pParam->Base.idxSegReg = (DISSELREG)idx; 2398 2398 } 2399 2399 -
trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
r41743 r41744 100 100 case DISUSE_REG_GEN8: 101 101 { 102 Assert(pParam-> base.reg_gen< RT_ELEMENTS(g_aszYasmRegGen8));103 const char *psz = g_aszYasmRegGen8[pParam-> base.reg_gen];102 Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen8)); 103 const char *psz = g_aszYasmRegGen8[pParam->Base.idxGenReg]; 104 104 *pcchReg = 2 + !!psz[2] + !!psz[3]; 105 105 return psz; … … 108 108 case DISUSE_REG_GEN16: 109 109 { 110 Assert(pParam-> base.reg_gen< RT_ELEMENTS(g_aszYasmRegGen16));111 const char *psz = g_aszYasmRegGen16[pParam-> base.reg_gen];110 Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen16)); 111 const char *psz = g_aszYasmRegGen16[pParam->Base.idxGenReg]; 112 112 *pcchReg = 2 + !!psz[2] + !!psz[3]; 113 113 return psz; … … 116 116 case DISUSE_REG_GEN32: 117 117 { 118 Assert(pParam-> base.reg_gen< RT_ELEMENTS(g_aszYasmRegGen32));119 const char *psz = g_aszYasmRegGen32[pParam-> base.reg_gen];118 Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen32)); 119 const char *psz = g_aszYasmRegGen32[pParam->Base.idxGenReg]; 120 120 *pcchReg = 2 + !!psz[2] + !!psz[3]; 121 121 return psz; … … 124 124 case DISUSE_REG_GEN64: 125 125 { 126 Assert(pParam-> base.reg_gen< RT_ELEMENTS(g_aszYasmRegGen64));127 const char *psz = g_aszYasmRegGen64[pParam-> base.reg_gen];126 Assert(pParam->Base.idxGenReg < RT_ELEMENTS(g_aszYasmRegGen64)); 127 const char *psz = g_aszYasmRegGen64[pParam->Base.idxGenReg]; 128 128 *pcchReg = 2 + !!psz[2] + !!psz[3]; 129 129 return psz; … … 132 132 case DISUSE_REG_FP: 133 133 { 134 Assert(pParam-> base.reg_fp< RT_ELEMENTS(g_aszYasmRegFP));135 const char *psz = g_aszYasmRegFP[pParam-> base.reg_fp];134 Assert(pParam->Base.idxFpuReg < RT_ELEMENTS(g_aszYasmRegFP)); 135 const char *psz = g_aszYasmRegFP[pParam->Base.idxFpuReg]; 136 136 *pcchReg = 3; 137 137 return psz; … … 140 140 case DISUSE_REG_MMX: 141 141 { 142 Assert(pParam-> base.reg_mmx< RT_ELEMENTS(g_aszYasmRegMMX));143 const char *psz = g_aszYasmRegMMX[pParam-> base.reg_mmx];142 Assert(pParam->Base.idxMmxReg < RT_ELEMENTS(g_aszYasmRegMMX)); 143 const char *psz = g_aszYasmRegMMX[pParam->Base.idxMmxReg]; 144 144 *pcchReg = 3; 145 145 return psz; … … 148 148 case DISUSE_REG_XMM: 149 149 { 150 Assert(pParam-> base.reg_xmm< RT_ELEMENTS(g_aszYasmRegXMM));151 const char *psz = g_aszYasmRegXMM[pParam-> base.reg_mmx];150 Assert(pParam->Base.idxXmmReg < RT_ELEMENTS(g_aszYasmRegXMM)); 151 const char *psz = g_aszYasmRegXMM[pParam->Base.idxMmxReg]; 152 152 *pcchReg = 4 + !!psz[4]; 153 153 return psz; … … 156 156 case DISUSE_REG_CR: 157 157 { 158 Assert(pParam-> base.reg_ctrl< RT_ELEMENTS(g_aszYasmRegCRx));159 const char *psz = g_aszYasmRegCRx[pParam-> base.reg_ctrl];158 Assert(pParam->Base.idxCtrlReg < RT_ELEMENTS(g_aszYasmRegCRx)); 159 const char *psz = g_aszYasmRegCRx[pParam->Base.idxCtrlReg]; 160 160 *pcchReg = 3; 161 161 return psz; … … 164 164 case DISUSE_REG_DBG: 165 165 { 166 Assert(pParam-> base.reg_dbg < RT_ELEMENTS(g_aszYasmRegDRx));167 const char *psz = g_aszYasmRegDRx[pParam-> base.reg_dbg];166 Assert(pParam->Base.idxDbgReg < RT_ELEMENTS(g_aszYasmRegDRx)); 167 const char *psz = g_aszYasmRegDRx[pParam->Base.idxDbgReg]; 168 168 *pcchReg = 3; 169 169 return psz; … … 172 172 case DISUSE_REG_SEG: 173 173 { 174 Assert(pParam-> base.reg_seg < RT_ELEMENTS(g_aszYasmRegCRx));175 const char *psz = g_aszYasmRegSeg[pParam-> base.reg_seg];174 Assert(pParam->Base.idxSegReg < RT_ELEMENTS(g_aszYasmRegCRx)); 175 const char *psz = g_aszYasmRegSeg[pParam->Base.idxSegReg]; 176 176 *pcchReg = 2; 177 177 return psz; … … 180 180 case DISUSE_REG_TEST: 181 181 { 182 Assert(pParam-> base.reg_test< RT_ELEMENTS(g_aszYasmRegTRx));183 const char *psz = g_aszYasmRegTRx[pParam-> base.reg_test];182 Assert(pParam->Base.idxTestReg < RT_ELEMENTS(g_aszYasmRegTRx)); 183 const char *psz = g_aszYasmRegTRx[pParam->Base.idxTestReg]; 184 184 *pcchReg = 3; 185 185 return psz; -
trunk/src/VBox/Disassembler/DisasmReg.cpp
r41743 r41744 270 270 AssertCompile(DISGREG_ESP == DISGREG_SP); 271 271 AssertCompile(DISGREG_EBP == DISGREG_BP); 272 if (pParam-> base.reg_gen == DISGREG_ESP || pParam->base.reg_gen== DISGREG_EBP)272 if (pParam->Base.idxGenReg == DISGREG_ESP || pParam->Base.idxGenReg == DISGREG_EBP) 273 273 return DISSELREG_SS; 274 274 } … … 515 515 { 516 516 pParamVal->flags |= DISQPV_FLAG_8; 517 if (RT_FAILURE(DISFetchReg8(pCtx, pParam-> base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;517 if (RT_FAILURE(DISFetchReg8(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER; 518 518 } 519 519 else … … 521 521 { 522 522 pParamVal->flags |= DISQPV_FLAG_16; 523 if (RT_FAILURE(DISFetchReg16(pCtx, pParam-> base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;523 if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER; 524 524 } 525 525 else … … 527 527 { 528 528 pParamVal->flags |= DISQPV_FLAG_32; 529 if (RT_FAILURE(DISFetchReg32(pCtx, pParam-> base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;529 if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER; 530 530 } 531 531 else … … 533 533 { 534 534 pParamVal->flags |= DISQPV_FLAG_64; 535 if (RT_FAILURE(DISFetchReg64(pCtx, pParam-> base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;535 if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER; 536 536 } 537 537 else … … 647 647 pParamVal->flags |= DISQPV_FLAG_8; 648 648 pParamVal->size = sizeof(uint8_t); 649 if (RT_FAILURE(DISFetchReg8(pCtx, pParam-> base.reg_gen, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER;649 if (RT_FAILURE(DISFetchReg8(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val8))) return VERR_INVALID_PARAMETER; 650 650 } 651 651 else … … 654 654 pParamVal->flags |= DISQPV_FLAG_16; 655 655 pParamVal->size = sizeof(uint16_t); 656 if (RT_FAILURE(DISFetchReg16(pCtx, pParam-> base.reg_gen, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER;656 if (RT_FAILURE(DISFetchReg16(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val16))) return VERR_INVALID_PARAMETER; 657 657 } 658 658 else … … 661 661 pParamVal->flags |= DISQPV_FLAG_32; 662 662 pParamVal->size = sizeof(uint32_t); 663 if (RT_FAILURE(DISFetchReg32(pCtx, pParam-> base.reg_gen, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER;663 if (RT_FAILURE(DISFetchReg32(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val32))) return VERR_INVALID_PARAMETER; 664 664 } 665 665 else … … 668 668 pParamVal->flags |= DISQPV_FLAG_64; 669 669 pParamVal->size = sizeof(uint64_t); 670 if (RT_FAILURE(DISFetchReg64(pCtx, pParam-> base.reg_gen, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER;670 if (RT_FAILURE(DISFetchReg64(pCtx, pParam->Base.idxGenReg, &pParamVal->val.val64))) return VERR_INVALID_PARAMETER; 671 671 } 672 672 else … … 767 767 { 768 768 uint8_t *pu8Reg; 769 if (RT_SUCCESS(DISPtrReg8(pCtx, pParam-> base.reg_gen, &pu8Reg)))769 if (RT_SUCCESS(DISPtrReg8(pCtx, pParam->Base.idxGenReg, &pu8Reg))) 770 770 { 771 771 *pcbSize = sizeof(uint8_t); … … 778 778 { 779 779 uint16_t *pu16Reg; 780 if (RT_SUCCESS(DISPtrReg16(pCtx, pParam-> base.reg_gen, &pu16Reg)))780 if (RT_SUCCESS(DISPtrReg16(pCtx, pParam->Base.idxGenReg, &pu16Reg))) 781 781 { 782 782 *pcbSize = sizeof(uint16_t); … … 789 789 { 790 790 uint32_t *pu32Reg; 791 if (RT_SUCCESS(DISPtrReg32(pCtx, pParam-> base.reg_gen, &pu32Reg)))791 if (RT_SUCCESS(DISPtrReg32(pCtx, pParam->Base.idxGenReg, &pu32Reg))) 792 792 { 793 793 *pcbSize = sizeof(uint32_t); … … 800 800 { 801 801 uint64_t *pu64Reg; 802 if (RT_SUCCESS(DISPtrReg64(pCtx, pParam-> base.reg_gen, &pu64Reg)))802 if (RT_SUCCESS(DISPtrReg64(pCtx, pParam->Base.idxGenReg, &pu64Reg))) 803 803 { 804 804 *pcbSize = sizeof(uint64_t);
Note:
See TracChangeset
for help on using the changeset viewer.