Changeset 41734 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Jun 15, 2012 12:20:13 AM (13 years ago)
- svn:sync-xref-src-repo-rev:
- 78542
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r41733 r41734 304 304 pCpu->opmode = enmCpuMode; 305 305 } 306 pCpu-> prefix= DISPREFIX_NONE;306 pCpu->fPrefix = DISPREFIX_NONE; 307 307 pCpu->idxSegPrefix = DISSELREG_DS; 308 308 pCpu->uInstrAddr = uInstrAddr; … … 346 346 /** Last prefix byte (for SSE2 extension tables); don't include the REX prefix */ 347 347 pCpu->bLastPrefix = opcode; 348 pCpu-> prefix &= ~DISPREFIX_REX;348 pCpu->fPrefix &= ~DISPREFIX_REX; 349 349 } 350 350 … … 363 363 || pCpu->idxSegPrefix >= DISSELREG_FS) 364 364 { 365 pCpu-> prefix|= DISPREFIX_SEG;365 pCpu->fPrefix |= DISPREFIX_SEG; 366 366 } 367 367 iByte += sizeof(uint8_t); … … 370 370 // lock prefix byte 371 371 case OP_LOCK: 372 pCpu-> prefix |= DISPREFIX_LOCK;372 pCpu->fPrefix |= DISPREFIX_LOCK; 373 373 iByte += sizeof(uint8_t); 374 374 continue; //fetch the next byte … … 376 376 // address size override prefix byte 377 377 case OP_ADDRSIZE: 378 pCpu-> prefix |= DISPREFIX_ADDRSIZE;378 pCpu->fPrefix |= DISPREFIX_ADDRSIZE; 379 379 if (pCpu->mode == DISCPUMODE_16BIT) 380 380 pCpu->addrmode = DISCPUMODE_32BIT; … … 390 390 // operand size override prefix byte 391 391 case OP_OPSIZE: 392 pCpu-> prefix |= DISPREFIX_OPSIZE;392 pCpu->fPrefix |= DISPREFIX_OPSIZE; 393 393 if (pCpu->mode == DISCPUMODE_16BIT) 394 394 pCpu->opmode = DISCPUMODE_32BIT; … … 401 401 // rep and repne are not really prefixes, but we'll treat them as such 402 402 case OP_REPE: 403 pCpu-> prefix |= DISPREFIX_REP;403 pCpu->fPrefix |= DISPREFIX_REP; 404 404 iByte += sizeof(uint8_t); 405 405 continue; //fetch the next byte 406 406 407 407 case OP_REPNE: 408 pCpu-> prefix |= DISPREFIX_REPNE;408 pCpu->fPrefix |= DISPREFIX_REPNE; 409 409 iByte += sizeof(uint8_t); 410 410 continue; //fetch the next byte … … 413 413 Assert(pCpu->mode == DISCPUMODE_64BIT); 414 414 /* REX prefix byte */ 415 pCpu-> prefix|= DISPREFIX_REX;415 pCpu->fPrefix |= DISPREFIX_REX; 416 416 pCpu->fRexPrefix = DISPREFIX_REX_OP_2_FLAGS(paOneByteMap[codebyte].param1); 417 417 iByte += sizeof(uint8_t); … … 438 438 *pcbInstr = iByte; 439 439 440 if (pCpu-> prefix & DISPREFIX_LOCK)440 if (pCpu->fPrefix & DISPREFIX_LOCK) 441 441 disValidateLockSequence(pCpu); 442 442 … … 482 482 else 483 483 if ( (pOp->optype & DISOPTYPE_DEFAULT_64_OP_SIZE) 484 && !(pCpu-> prefix & DISPREFIX_OPSIZE))484 && !(pCpu->fPrefix & DISPREFIX_OPSIZE)) 485 485 pCpu->opmode = DISCPUMODE_64BIT; 486 486 } … … 561 561 else 562 562 if ( (fpop->optype & DISOPTYPE_DEFAULT_64_OP_SIZE) 563 && !(pCpu-> prefix & DISPREFIX_OPSIZE))563 && !(pCpu->fPrefix & DISPREFIX_OPSIZE)) 564 564 pCpu->opmode = DISCPUMODE_64BIT; 565 565 } … … 662 662 pCpu->SIB.Bits.Scale = SIB_SCALE(SIB); 663 663 664 if (pCpu-> prefix & DISPREFIX_REX)664 if (pCpu->fPrefix & DISPREFIX_REX) 665 665 { 666 666 /* REX.B extends the Base field if not scaled index + disp32 */ … … 695 695 pCpu->SIB.Bits.Scale = SIB_SCALE(SIB); 696 696 697 if (pCpu-> prefix & DISPREFIX_REX)697 if (pCpu->fPrefix & DISPREFIX_REX) 698 698 { 699 699 /* REX.B extends the Base field. */ … … 739 739 if ( pCpu->pCurInstr->opcode == OP_MOV_CR 740 740 && pCpu->opmode == DISCPUMODE_32BIT 741 && (pCpu-> prefix & DISPREFIX_LOCK))741 && (pCpu->fPrefix & DISPREFIX_LOCK)) 742 742 { 743 pCpu-> prefix &= ~DISPREFIX_LOCK;743 pCpu->fPrefix &= ~DISPREFIX_LOCK; 744 744 pParam->base.reg_ctrl = DISCREG_CR8; 745 745 } … … 1080 1080 pCpu->ModRM.Bits.Mod = 3; 1081 1081 1082 if (pCpu-> prefix & DISPREFIX_REX)1082 if (pCpu->fPrefix & DISPREFIX_REX) 1083 1083 { 1084 1084 Assert(pCpu->mode == DISCPUMODE_64BIT); … … 1126 1126 pCpu->ModRM.Bits.Mod = 3; 1127 1127 1128 if (pCpu-> prefix & DISPREFIX_REX)1128 if (pCpu->fPrefix & DISPREFIX_REX) 1129 1129 { 1130 1130 Assert(pCpu->mode == DISCPUMODE_64BIT); … … 1570 1570 if ( (pOp->optype & DISOPTYPE_REXB_EXTENDS_OPREG) 1571 1571 && pParam == &pCpu->param1 /* ugly assumption that it only applies to the first parameter */ 1572 && (pCpu-> prefix & DISPREFIX_REX)1572 && (pCpu->fPrefix & DISPREFIX_REX) 1573 1573 && (pCpu->fRexPrefix & DISPREFIX_REX_FLAGS)) 1574 1574 pParam->base.reg_gen += 8; … … 1614 1614 if ( (pOp->optype & DISOPTYPE_REXB_EXTENDS_OPREG) 1615 1615 && pParam == &pCpu->param1 /* ugly assumption that it only applies to the first parameter */ 1616 && (pCpu-> prefix & DISPREFIX_REX)1616 && (pCpu->fPrefix & DISPREFIX_REX) 1617 1617 && (pCpu->fRexPrefix & DISPREFIX_REX_FLAGS)) 1618 1618 pParam->base.reg_gen += 8; /* least significant byte of R8-R15 */ … … 1760 1760 1761 1761 /* Cancel prefix changes. */ 1762 pCpu-> prefix &= ~DISPREFIX_OPSIZE;1762 pCpu->fPrefix &= ~DISPREFIX_OPSIZE; 1763 1763 pCpu->opmode = pCpu->mode; 1764 1764 } … … 1772 1772 1773 1773 /* Cancel prefix changes. */ 1774 pCpu-> prefix &= ~DISPREFIX_REPNE;1774 pCpu->fPrefix &= ~DISPREFIX_REPNE; 1775 1775 } 1776 1776 break; … … 1783 1783 1784 1784 /* Cancel prefix changes. */ 1785 pCpu-> prefix &= ~DISPREFIX_REP;1785 pCpu->fPrefix &= ~DISPREFIX_REP; 1786 1786 } 1787 1787 break; … … 1827 1827 1828 1828 /* Cancel prefix changes. */ 1829 pCpu-> prefix &= ~DISPREFIX_OPSIZE;1829 pCpu->fPrefix &= ~DISPREFIX_OPSIZE; 1830 1830 pCpu->opmode = pCpu->mode; 1831 1831 } … … 1844 1844 1845 1845 /* Cancel prefix changes. */ 1846 pCpu-> prefix &= ~DISPREFIX_REPNE;1846 pCpu->fPrefix &= ~DISPREFIX_REPNE; 1847 1847 } 1848 1848 } … … 1878 1878 1879 1879 /* Cancel prefix changes. */ 1880 pCpu-> prefix &= ~DISPREFIX_OPSIZE;1880 pCpu->fPrefix &= ~DISPREFIX_OPSIZE; 1881 1881 pCpu->opmode = pCpu->mode; 1882 1882 } … … 1895 1895 NOREF(pParam); 1896 1896 1897 if (pCpu-> prefix & DISPREFIX_REP)1897 if (pCpu->fPrefix & DISPREFIX_REP) 1898 1898 { 1899 1899 pOp = &g_aMapX86_NopPause[1]; /* PAUSE */ 1900 pCpu-> prefix &= ~DISPREFIX_REP;1900 pCpu->fPrefix &= ~DISPREFIX_REP; 1901 1901 } 1902 1902 else … … 2185 2185 reg = MODRM_REG(modrm); 2186 2186 2187 if (pCpu-> prefix & DISPREFIX_OPSIZE)2187 if (pCpu->fPrefix & DISPREFIX_OPSIZE) 2188 2188 reg += 8; //2nd table 2189 2189 … … 2206 2206 modrm = disReadByte(pCpu, uCodePtr); 2207 2207 reg = MODRM_REG(modrm); 2208 if (pCpu-> prefix & DISPREFIX_OPSIZE)2208 if (pCpu->fPrefix & DISPREFIX_OPSIZE) 2209 2209 reg += 8; //2nd table 2210 2210 … … 2228 2228 modrm = disReadByte(pCpu, uCodePtr); 2229 2229 reg = MODRM_REG(modrm); 2230 if (pCpu-> prefix & DISPREFIX_OPSIZE)2230 if (pCpu->fPrefix & DISPREFIX_OPSIZE) 2231 2231 reg += 8; //2nd table 2232 2232 … … 2330 2330 { 2331 2331 case OP_PARM_b: 2332 Assert(idx < (pCpu-> prefix & DISPREFIX_REX ? 16U : 8U));2332 Assert(idx < (pCpu->fPrefix & DISPREFIX_REX ? 16U : 8U)); 2333 2333 2334 2334 /* AH, BH, CH & DH map to DIL, SIL, EBL & SPL when a rex prefix is present. */ 2335 2335 /* Intel® 64 and IA-32 Architectures Software Developers Manual: 3.4.1.1 */ 2336 if ( (pCpu-> prefix & DISPREFIX_REX)2336 if ( (pCpu->fPrefix & DISPREFIX_REX) 2337 2337 && idx >= DISGREG_AH 2338 2338 && idx <= DISGREG_BH) … … 2346 2346 2347 2347 case OP_PARM_w: 2348 Assert(idx < (pCpu-> prefix & DISPREFIX_REX ? 16U : 8U));2348 Assert(idx < (pCpu->fPrefix & DISPREFIX_REX ? 16U : 8U)); 2349 2349 2350 2350 pParam->fUse |= DISUSE_REG_GEN16; … … 2353 2353 2354 2354 case OP_PARM_d: 2355 Assert(idx < (pCpu-> prefix & DISPREFIX_REX ? 16U : 8U));2355 Assert(idx < (pCpu->fPrefix & DISPREFIX_REX ? 16U : 8U)); 2356 2356 2357 2357 pParam->fUse |= DISUSE_REG_GEN32; … … 2618 2618 static void disValidateLockSequence(PDISCPUSTATE pCpu) 2619 2619 { 2620 Assert(pCpu-> prefix & DISPREFIX_LOCK);2620 Assert(pCpu->fPrefix & DISPREFIX_LOCK); 2621 2621 2622 2622 /* -
trunk/src/VBox/Disassembler/DisasmFormatYasm.cpp
r41733 r41734 392 392 if ( pOp->opcode == OP_INVALID 393 393 || ( pOp->opcode == OP_ILLUD2 394 && (pCpu-> prefix & DISPREFIX_LOCK)))394 && (pCpu->fPrefix & DISPREFIX_LOCK))) 395 395 { 396 396 … … 401 401 * Prefixes 402 402 */ 403 if (pCpu-> prefix & DISPREFIX_LOCK)403 if (pCpu->fPrefix & DISPREFIX_LOCK) 404 404 PUT_SZ("lock "); 405 if(pCpu-> prefix & DISPREFIX_REP)405 if(pCpu->fPrefix & DISPREFIX_REP) 406 406 PUT_SZ("rep "); 407 else if(pCpu-> prefix & DISPREFIX_REPNE)407 else if(pCpu->fPrefix & DISPREFIX_REPNE) 408 408 PUT_SZ("repne "); 409 409 … … 604 604 #define PUT_SEGMENT_OVERRIDE() \ 605 605 do { \ 606 if (pCpu-> prefix & DISPREFIX_SEG) \606 if (pCpu->fPrefix & DISPREFIX_SEG) \ 607 607 PUT_STR(s_szSegPrefix[pCpu->idxSegPrefix], 3); \ 608 608 } while (0) … … 612 612 * Segment prefixing for instructions that doesn't do memory access. 613 613 */ 614 if ( (pCpu-> prefix & DISPREFIX_SEG)614 if ( (pCpu->fPrefix & DISPREFIX_SEG) 615 615 && !DISUSE_IS_EFFECTIVE_ADDR(pCpu->param1.fUse) 616 616 && !DISUSE_IS_EFFECTIVE_ADDR(pCpu->param2.fUse) … … 1291 1291 { 1292 1292 /* no effective address which it may apply to. */ 1293 Assert((pCpu-> prefix & DISPREFIX_SEG) || pCpu->mode == DISCPUMODE_64BIT);1293 Assert((pCpu->fPrefix & DISPREFIX_SEG) || pCpu->mode == DISCPUMODE_64BIT); 1294 1294 if ( !DISUSE_IS_EFFECTIVE_ADDR(pCpu->param1.fUse) 1295 1295 && !DISUSE_IS_EFFECTIVE_ADDR(pCpu->param2.fUse) … … 1301 1301 if (fPrefixes & DISPREFIX_ADDRSIZE) 1302 1302 { 1303 Assert(pCpu-> prefix & DISPREFIX_ADDRSIZE);1303 Assert(pCpu->fPrefix & DISPREFIX_ADDRSIZE); 1304 1304 if ( pCpu->pCurInstr->param3 == OP_PARM_NONE 1305 1305 && pCpu->pCurInstr->param2 == OP_PARM_NONE -
trunk/src/VBox/Disassembler/DisasmReg.cpp
r41732 r41734 259 259 DISDECL(DISSELREG) DISDetectSegReg(PDISCPUSTATE pCpu, PDISOPPARAM pParam) 260 260 { 261 if (pCpu-> prefix & DISPREFIX_SEG)261 if (pCpu->fPrefix & DISPREFIX_SEG) 262 262 /* Use specified SEG: prefix. */ 263 263 return (DISSELREG)pCpu->idxSegPrefix; … … 280 280 DISDECL(uint8_t) DISQuerySegPrefixByte(PDISCPUSTATE pCpu) 281 281 { 282 Assert(pCpu-> prefix & DISPREFIX_SEG);282 Assert(pCpu->fPrefix & DISPREFIX_SEG); 283 283 switch (pCpu->idxSegPrefix) 284 284 {
Note:
See TracChangeset
for help on using the changeset viewer.