Changeset 41863 in vbox for trunk/src/VBox/Disassembler
- Timestamp:
- Jun 21, 2012 3:46:24 PM (12 years ago)
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r41822 r41863 2142 2142 static size_t Parse3DNow(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam) 2143 2143 { 2144 /** @todo This code needs testing! */2144 /** @todo This code needs testing! Esp. wrt invalid opcodes. */ 2145 2145 2146 2146 uint8_t ModRM = disReadByte(pDis, offInstr); … … 2156 2156 2157 2157 size_t offStrict = disParseInstruction(offInstr, pOp, pDis); 2158 Assert(offStrict == offRet - 1 ); NOREF(offStrict); /* the imm8_opcode */2158 Assert(offStrict == offRet - 1 || pOp->uOpcode == OP_INVALID); NOREF(offStrict); /* the imm8_opcode */ 2159 2159 return offRet; 2160 2160 } -
trunk/src/VBox/Disassembler/DisasmTables.cpp
r41796 r41863 32 32 33 33 #ifndef DIS_CORE_ONLY 34 static char SZINVALID_OPCODE[] = "Invalid Opcode";34 static char g_szInvalidOpcode[] = "Invalid Opcode"; 35 35 #endif 36 36 37 37 #define INVALID_OPCODE \ 38 OP( SZINVALID_OPCODE,0, 0, 0, OP_INVALID, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_INVALID)38 OP(g_szInvalidOpcode, 0, 0, 0, OP_INVALID, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_INVALID) 39 39 #define INVALID_OPCODE_BLOCK \ 40 40 INVALID_OPCODE,\ … … 55 55 INVALID_OPCODE, 56 56 57 #define INVALID_OPCODE_MOD_RM \ 58 OP(SZINVALID_OPCODE, IDX_ParseInvOpModRM, 0, 0, OP_INVALID, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_INVALID) 59 #define INVALID_OPCODE_BLOCK_MOD_RM \ 60 INVALID_OPCODE_MOD_RM,\ 61 INVALID_OPCODE_MOD_RM,\ 62 INVALID_OPCODE_MOD_RM,\ 63 INVALID_OPCODE_MOD_RM,\ 64 INVALID_OPCODE_MOD_RM,\ 65 INVALID_OPCODE_MOD_RM,\ 66 INVALID_OPCODE_MOD_RM,\ 67 INVALID_OPCODE_MOD_RM,\ 68 INVALID_OPCODE_MOD_RM,\ 69 INVALID_OPCODE_MOD_RM,\ 70 INVALID_OPCODE_MOD_RM,\ 71 INVALID_OPCODE_MOD_RM,\ 72 INVALID_OPCODE_MOD_RM,\ 73 INVALID_OPCODE_MOD_RM,\ 74 INVALID_OPCODE_MOD_RM,\ 75 INVALID_OPCODE_MOD_RM, 57 #define INVALID_OPCODE_MOD_RM(a_Index) \ 58 OP(g_szInvalidOpcode, IDX_ParseInvOpModRM, 0, 0, OP_INVALID, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_INVALID) 59 #define INVALID_OPCODE_BLOCK_MOD_RM(a_UpperDigit) \ 60 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 0),\ 61 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 1),\ 62 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 2),\ 63 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 3),\ 64 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 4),\ 65 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 5),\ 66 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 6),\ 67 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 7),\ 68 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 8),\ 69 INVALID_OPCODE_MOD_RM(a_UpperDigit ## 9),\ 70 INVALID_OPCODE_MOD_RM(a_UpperDigit ## a),\ 71 INVALID_OPCODE_MOD_RM(a_UpperDigit ## b),\ 72 INVALID_OPCODE_MOD_RM(a_UpperDigit ## c),\ 73 INVALID_OPCODE_MOD_RM(a_UpperDigit ## d),\ 74 INVALID_OPCODE_MOD_RM(a_UpperDigit ## e),\ 75 INVALID_OPCODE_MOD_RM(a_UpperDigit ## f), 76 76 77 77 78 /* Invalid opcode */ … … 1497 1498 { 1498 1499 /* 0 */ 1499 INVALID_OPCODE_MOD_RM, 1500 INVALID_OPCODE_MOD_RM, 1501 INVALID_OPCODE_MOD_RM, 1502 INVALID_OPCODE_MOD_RM, 1503 INVALID_OPCODE_MOD_RM, 1504 INVALID_OPCODE_MOD_RM, 1505 INVALID_OPCODE_MOD_RM, 1506 INVALID_OPCODE_MOD_RM, 1507 INVALID_OPCODE_MOD_RM, 1508 INVALID_OPCODE_MOD_RM, 1509 INVALID_OPCODE_MOD_RM, 1500 INVALID_OPCODE_MOD_RM(0x00), 1501 INVALID_OPCODE_MOD_RM(0x01), 1502 INVALID_OPCODE_MOD_RM(0x02), 1503 INVALID_OPCODE_MOD_RM(0x03), 1504 INVALID_OPCODE_MOD_RM(0x04), 1505 INVALID_OPCODE_MOD_RM(0x05), 1506 INVALID_OPCODE_MOD_RM(0x06), 1507 INVALID_OPCODE_MOD_RM(0x07), 1508 INVALID_OPCODE_MOD_RM(0x08), 1509 INVALID_OPCODE_MOD_RM(0x09), 1510 INVALID_OPCODE_MOD_RM(0x0a), 1511 INVALID_OPCODE_MOD_RM(0x0c), 1510 1512 OP("pi2fw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PI2FW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1511 1513 OP("pi2fd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PI2FD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1512 INVALID_OPCODE_MOD_RM ,1513 INVALID_OPCODE_MOD_RM ,1514 INVALID_OPCODE_MOD_RM(0x0e), 1515 INVALID_OPCODE_MOD_RM(0x0f), 1514 1516 1515 1517 /* 1 */ 1516 INVALID_OPCODE_MOD_RM, 1517 INVALID_OPCODE_MOD_RM, 1518 INVALID_OPCODE_MOD_RM, 1519 INVALID_OPCODE_MOD_RM, 1520 INVALID_OPCODE_MOD_RM, 1521 INVALID_OPCODE_MOD_RM, 1522 INVALID_OPCODE_MOD_RM, 1523 INVALID_OPCODE_MOD_RM, 1524 INVALID_OPCODE_MOD_RM, 1525 INVALID_OPCODE_MOD_RM, 1526 INVALID_OPCODE_MOD_RM, 1518 INVALID_OPCODE_MOD_RM(0x10), 1519 INVALID_OPCODE_MOD_RM(0x11), 1520 INVALID_OPCODE_MOD_RM(0x12), 1521 INVALID_OPCODE_MOD_RM(0x13), 1522 INVALID_OPCODE_MOD_RM(0x14), 1523 INVALID_OPCODE_MOD_RM(0x15), 1524 INVALID_OPCODE_MOD_RM(0x16), 1525 INVALID_OPCODE_MOD_RM(0x17), 1526 INVALID_OPCODE_MOD_RM(0x18), 1527 INVALID_OPCODE_MOD_RM(0x19), 1528 INVALID_OPCODE_MOD_RM(0x1a), 1529 INVALID_OPCODE_MOD_RM(0x1b), 1527 1530 OP("pf2iw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PF2IW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1528 1531 OP("pf2id %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PF2ID, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1529 INVALID_OPCODE_MOD_RM ,1530 INVALID_OPCODE_MOD_RM ,1532 INVALID_OPCODE_MOD_RM(0x1e), 1533 INVALID_OPCODE_MOD_RM(0x1f), 1531 1534 1532 1535 /* 2 */ 1533 INVALID_OPCODE_BLOCK_MOD_RM 1536 INVALID_OPCODE_BLOCK_MOD_RM(0x2) 1534 1537 1535 1538 /* 3 */ 1536 INVALID_OPCODE_BLOCK_MOD_RM 1539 INVALID_OPCODE_BLOCK_MOD_RM(0x3) 1537 1540 1538 1541 /* 4 */ 1539 INVALID_OPCODE_BLOCK_MOD_RM 1542 INVALID_OPCODE_BLOCK_MOD_RM(0x4) 1540 1543 1541 1544 /* 5 */ 1542 INVALID_OPCODE_BLOCK_MOD_RM 1545 INVALID_OPCODE_BLOCK_MOD_RM(0x5) 1543 1546 1544 1547 /* 6 */ 1545 INVALID_OPCODE_BLOCK_MOD_RM 1548 INVALID_OPCODE_BLOCK_MOD_RM(0x6) 1546 1549 1547 1550 /* 7 */ 1548 INVALID_OPCODE_BLOCK_MOD_RM 1551 INVALID_OPCODE_BLOCK_MOD_RM(0x7) 1549 1552 1550 1553 /* 8 */ 1551 INVALID_OPCODE_MOD_RM ,1552 INVALID_OPCODE_MOD_RM ,1553 INVALID_OPCODE_MOD_RM ,1554 INVALID_OPCODE_MOD_RM ,1555 INVALID_OPCODE_MOD_RM ,1556 INVALID_OPCODE_MOD_RM ,1557 INVALID_OPCODE_MOD_RM ,1558 INVALID_OPCODE_MOD_RM ,1559 INVALID_OPCODE_MOD_RM ,1560 INVALID_OPCODE_MOD_RM ,1554 INVALID_OPCODE_MOD_RM(0x80), 1555 INVALID_OPCODE_MOD_RM(0x81), 1556 INVALID_OPCODE_MOD_RM(0x82), 1557 INVALID_OPCODE_MOD_RM(0x83), 1558 INVALID_OPCODE_MOD_RM(0x84), 1559 INVALID_OPCODE_MOD_RM(0x85), 1560 INVALID_OPCODE_MOD_RM(0x86), 1561 INVALID_OPCODE_MOD_RM(0x87), 1562 INVALID_OPCODE_MOD_RM(0x88), 1563 INVALID_OPCODE_MOD_RM(0x89), 1561 1564 OP("pfnacc %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFNACC, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1562 INVALID_OPCODE_MOD_RM ,1563 INVALID_OPCODE_MOD_RM ,1564 INVALID_OPCODE_MOD_RM ,1565 INVALID_OPCODE_MOD_RM(0x8b), 1566 INVALID_OPCODE_MOD_RM(0x8c), 1567 INVALID_OPCODE_MOD_RM(0x8d), 1565 1568 OP("pfpnacc %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFPNACC, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1566 INVALID_OPCODE_MOD_RM ,1569 INVALID_OPCODE_MOD_RM(0x8f), 1567 1570 1568 1571 /* 9 */ 1569 1572 OP("pfcmpge %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFCMPGE, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1570 INVALID_OPCODE_MOD_RM ,1571 INVALID_OPCODE_MOD_RM ,1572 INVALID_OPCODE_MOD_RM ,1573 INVALID_OPCODE_MOD_RM(0x91), 1574 INVALID_OPCODE_MOD_RM(0x92), 1575 INVALID_OPCODE_MOD_RM(0x93), 1573 1576 OP("pfmin %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFMIN, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1574 INVALID_OPCODE_MOD_RM ,1577 INVALID_OPCODE_MOD_RM(0x95), 1575 1578 OP("pfrcp %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFRCP, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1576 1579 OP("pfrsqrt %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFRSQRT, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1577 INVALID_OPCODE_MOD_RM ,1578 INVALID_OPCODE_MOD_RM ,1580 INVALID_OPCODE_MOD_RM(0x98), 1581 INVALID_OPCODE_MOD_RM(0x99), 1579 1582 OP("pfsub %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFSUB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1580 INVALID_OPCODE_MOD_RM ,1581 INVALID_OPCODE_MOD_RM ,1582 INVALID_OPCODE_MOD_RM ,1583 INVALID_OPCODE_MOD_RM(0x9b), 1584 INVALID_OPCODE_MOD_RM(0x9c), 1585 INVALID_OPCODE_MOD_RM(0x9d), 1583 1586 OP("pfadd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFADD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1584 INVALID_OPCODE_MOD_RM ,1587 INVALID_OPCODE_MOD_RM(0x9f), 1585 1588 1586 1589 /* a */ 1587 1590 OP("pfcmpgt %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFCMPGT, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1588 INVALID_OPCODE_MOD_RM ,1589 INVALID_OPCODE_MOD_RM ,1590 INVALID_OPCODE_MOD_RM ,1591 INVALID_OPCODE_MOD_RM(0xa1), 1592 INVALID_OPCODE_MOD_RM(0xa2), 1593 INVALID_OPCODE_MOD_RM(0xa3), 1591 1594 OP("pfmax %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFMAX, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1592 INVALID_OPCODE_MOD_RM ,1595 INVALID_OPCODE_MOD_RM(0xa5), 1593 1596 OP("pfrcpit1 %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFRCPIT1,OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1594 1597 OP("pfrsqrtit1 %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFRSQRTIT1, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1595 INVALID_OPCODE_MOD_RM ,1596 INVALID_OPCODE_MOD_RM ,1598 INVALID_OPCODE_MOD_RM(0xa8), 1599 INVALID_OPCODE_MOD_RM(0xa9), 1597 1600 OP("pfsubr %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFSUBR, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1598 INVALID_OPCODE_MOD_RM ,1599 INVALID_OPCODE_MOD_RM ,1600 INVALID_OPCODE_MOD_RM ,1601 INVALID_OPCODE_MOD_RM(0xab), 1602 INVALID_OPCODE_MOD_RM(0xac), 1603 INVALID_OPCODE_MOD_RM(0xad), 1601 1604 OP("pfacc %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFACC, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1602 INVALID_OPCODE_MOD_RM ,1605 INVALID_OPCODE_MOD_RM(0xaf), 1603 1606 1604 1607 /* b */ 1605 1608 OP("pfcmpeq %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFCMPEQ, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1606 INVALID_OPCODE_MOD_RM ,1607 INVALID_OPCODE_MOD_RM ,1608 INVALID_OPCODE_MOD_RM ,1609 INVALID_OPCODE_MOD_RM(0xb1), 1610 INVALID_OPCODE_MOD_RM(0xb2), 1611 INVALID_OPCODE_MOD_RM(0xb3), 1609 1612 OP("pfmul %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFMUL, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1610 INVALID_OPCODE_MOD_RM ,1613 INVALID_OPCODE_MOD_RM(0xb5), 1611 1614 OP("pfrcpit2 %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFRCPIT2,OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1612 1615 OP("pfmulhrw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFMULHRW,OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1613 INVALID_OPCODE_MOD_RM ,1614 INVALID_OPCODE_MOD_RM ,1615 INVALID_OPCODE_MOD_RM ,1616 INVALID_OPCODE_MOD_RM(0xb8), 1617 INVALID_OPCODE_MOD_RM(0xb9), 1618 INVALID_OPCODE_MOD_RM(0xba), 1616 1619 OP("pswapd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PFSWAPD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1617 INVALID_OPCODE_MOD_RM ,1618 INVALID_OPCODE_MOD_RM ,1619 INVALID_OPCODE_MOD_RM ,1620 INVALID_OPCODE_MOD_RM(0xbc), 1621 INVALID_OPCODE_MOD_RM(0xbd), 1622 INVALID_OPCODE_MOD_RM(0xbe), 1620 1623 OP("pavgusb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PAVGUSB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, DISOPTYPE_HARMLESS), 1621 1624 1622 1625 /* c */ 1623 INVALID_OPCODE_BLOCK_MOD_RM 1626 INVALID_OPCODE_BLOCK_MOD_RM(0xc) 1624 1627 1625 1628 /* d */ 1626 INVALID_OPCODE_BLOCK_MOD_RM 1629 INVALID_OPCODE_BLOCK_MOD_RM(0xd) 1627 1630 1628 1631 /* e */ 1629 INVALID_OPCODE_BLOCK_MOD_RM 1632 INVALID_OPCODE_BLOCK_MOD_RM(0xe) 1630 1633 1631 1634 /* f */ 1632 INVALID_OPCODE_BLOCK_MOD_RM 1635 INVALID_OPCODE_BLOCK_MOD_RM(0xf) 1633 1636 }; 1634 1637 … … 2440 2443 OP("test %Eb,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_TEST, OP_PARM_Eb, OP_PARM_Ib , OP_PARM_NONE, DISOPTYPE_HARMLESS), 2441 2444 //AMD manual claims test?? 2442 INVALID_OPCODE_MOD_RM ,2445 INVALID_OPCODE_MOD_RM(0xf601), 2443 2446 OP("not %Eb", IDX_ParseModRM, 0, 0, OP_NOT, OP_PARM_Eb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2444 2447 OP("neg %Eb", IDX_ParseModRM, 0, 0, OP_NEG, OP_PARM_Eb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 2451 2454 OP("test %Ev,%Iz", IDX_ParseModRM, IDX_ParseImmZ, 0, OP_TEST, OP_PARM_Ev, OP_PARM_Iz , OP_PARM_NONE, DISOPTYPE_HARMLESS), 2452 2455 //AMD manual claims test?? 2453 INVALID_OPCODE_MOD_RM ,2456 INVALID_OPCODE_MOD_RM(0xf701), 2454 2457 OP("not %Ev", IDX_ParseModRM, 0, 0, OP_NOT, OP_PARM_Ev, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2455 2458 OP("neg %Ev", IDX_ParseModRM, 0, 0, OP_NEG, OP_PARM_Ev, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 2465 2468 OP("inc %Eb", IDX_ParseModRM, 0, 0, OP_INC, OP_PARM_Eb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2466 2469 OP("dec %Eb", IDX_ParseModRM, 0, 0, OP_DEC, OP_PARM_Eb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2467 INVALID_OPCODE_MOD_RM ,2468 INVALID_OPCODE_MOD_RM ,2469 INVALID_OPCODE_MOD_RM ,2470 INVALID_OPCODE_MOD_RM ,2471 INVALID_OPCODE_MOD_RM ,2472 INVALID_OPCODE_MOD_RM ,2470 INVALID_OPCODE_MOD_RM(0xfe02), 2471 INVALID_OPCODE_MOD_RM(0xfe03), 2472 INVALID_OPCODE_MOD_RM(0xfe04), 2473 INVALID_OPCODE_MOD_RM(0xfe05), 2474 INVALID_OPCODE_MOD_RM(0xfe06), 2475 INVALID_OPCODE_MOD_RM(0xfe07), 2473 2476 }; 2474 2477 … … 2483 2486 OP("jmp %Ep", IDX_ParseModRM, 0, 0, OP_JMP, OP_PARM_Ep, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_CONTROLFLOW | DISOPTYPE_UNCOND_CONTROLFLOW), 2484 2487 OP("push %Ev", IDX_ParseModRM, 0, 0, OP_PUSH, OP_PARM_Ev, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS | DISOPTYPE_DEFAULT_64_OP_SIZE), 2485 INVALID_OPCODE_MOD_RM ,2488 INVALID_OPCODE_MOD_RM(0xff07), 2486 2489 }; 2487 2490 … … 2496 2499 OP("verr %Ew", IDX_ParseModRM, 0, 0, OP_VERR, OP_PARM_Ew, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP), 2497 2500 OP("verw %Ew", IDX_ParseModRM, 0, 0, OP_VERW, OP_PARM_Ew, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_DANGEROUS | DISOPTYPE_PRIVILEGED_NOTRAP), 2498 INVALID_OPCODE_MOD_RM ,2499 INVALID_OPCODE_MOD_RM ,2501 INVALID_OPCODE_MOD_RM(0x0f0006), 2502 INVALID_OPCODE_MOD_RM(0x0f0007), 2500 2503 }; 2501 2504 … … 2545 2548 { 2546 2549 /* 0F BA */ 2547 INVALID_OPCODE_MOD_RM ,2548 INVALID_OPCODE_MOD_RM ,2549 INVALID_OPCODE_MOD_RM ,2550 INVALID_OPCODE_MOD_RM ,2550 INVALID_OPCODE_MOD_RM(0x), 2551 INVALID_OPCODE_MOD_RM(0x), 2552 INVALID_OPCODE_MOD_RM(0x), 2553 INVALID_OPCODE_MOD_RM(0x), 2551 2554 OP("bt %Ev,%Ib", IDX_ParseModRM, IDX_ParseImmByte, 0, OP_BT, OP_PARM_Ev, OP_PARM_Ib , OP_PARM_NONE, DISOPTYPE_HARMLESS), 2552 2555 OP("bts %Ev,%Ib", IDX_ParseModRM, IDX_ParseImmByte, 0, OP_BTS, OP_PARM_Ev, OP_PARM_Ib , OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 2558 2561 { 2559 2562 /* 0F C7 */ 2560 INVALID_OPCODE_MOD_RM ,2563 INVALID_OPCODE_MOD_RM(0x), 2561 2564 OP("cmpxchg8b %Mq", IDX_ParseModRM, 0, 0, OP_CMPXCHG8B, OP_PARM_Mq, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2562 INVALID_OPCODE_MOD_RM ,2563 INVALID_OPCODE_MOD_RM ,2564 INVALID_OPCODE_MOD_RM ,2565 INVALID_OPCODE_MOD_RM ,2566 INVALID_OPCODE_MOD_RM ,2567 INVALID_OPCODE_MOD_RM ,2565 INVALID_OPCODE_MOD_RM(0x), 2566 INVALID_OPCODE_MOD_RM(0x), 2567 INVALID_OPCODE_MOD_RM(0x), 2568 INVALID_OPCODE_MOD_RM(0x), 2569 INVALID_OPCODE_MOD_RM(0x), 2570 INVALID_OPCODE_MOD_RM(0x), 2568 2571 }; 2569 2572 … … 2571 2574 { 2572 2575 /* 0F B9 */ 2573 INVALID_OPCODE_MOD_RM ,2574 INVALID_OPCODE_MOD_RM ,2575 INVALID_OPCODE_MOD_RM ,2576 INVALID_OPCODE_MOD_RM ,2577 INVALID_OPCODE_MOD_RM ,2578 INVALID_OPCODE_MOD_RM ,2579 INVALID_OPCODE_MOD_RM ,2580 INVALID_OPCODE_MOD_RM ,2576 INVALID_OPCODE_MOD_RM(0x), 2577 INVALID_OPCODE_MOD_RM(0x), 2578 INVALID_OPCODE_MOD_RM(0x), 2579 INVALID_OPCODE_MOD_RM(0x), 2580 INVALID_OPCODE_MOD_RM(0x), 2581 INVALID_OPCODE_MOD_RM(0x), 2582 INVALID_OPCODE_MOD_RM(0x), 2583 INVALID_OPCODE_MOD_RM(0x), 2581 2584 }; 2582 2585 … … 2608 2611 const DISOPCODE g_aMapX86_Group12[8*2] = 2609 2612 { 2610 INVALID_OPCODE_MOD_RM ,2611 INVALID_OPCODE_MOD_RM ,2613 INVALID_OPCODE_MOD_RM(0x), 2614 INVALID_OPCODE_MOD_RM(0x), 2612 2615 OP("psrlw %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLW, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2613 INVALID_OPCODE_MOD_RM ,2616 INVALID_OPCODE_MOD_RM(0x), 2614 2617 OP("psraw %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRAW, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2615 INVALID_OPCODE_MOD_RM ,2618 INVALID_OPCODE_MOD_RM(0x), 2616 2619 OP("psllw %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLW, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2617 INVALID_OPCODE_MOD_RM ,2620 INVALID_OPCODE_MOD_RM(0x), 2618 2621 2619 2622 /* Group 12 with prefix 0x66 */ 2620 INVALID_OPCODE_MOD_RM ,2621 INVALID_OPCODE_MOD_RM ,2623 INVALID_OPCODE_MOD_RM(0x), 2624 INVALID_OPCODE_MOD_RM(0x), 2622 2625 OP("psrlw %Pdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLW, OP_PARM_Pdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2623 INVALID_OPCODE_MOD_RM ,2626 INVALID_OPCODE_MOD_RM(0x), 2624 2627 OP("psraw %Pdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRAW, OP_PARM_Pdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2625 INVALID_OPCODE_MOD_RM ,2628 INVALID_OPCODE_MOD_RM(0x), 2626 2629 OP("psllw %Pdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLW, OP_PARM_Pdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2627 INVALID_OPCODE_MOD_RM ,2630 INVALID_OPCODE_MOD_RM(0x), 2628 2631 }; 2629 2632 … … 2631 2634 const DISOPCODE g_aMapX86_Group13[8*2] = 2632 2635 { 2633 INVALID_OPCODE_MOD_RM ,2634 INVALID_OPCODE_MOD_RM ,2636 INVALID_OPCODE_MOD_RM(0x), 2637 INVALID_OPCODE_MOD_RM(0x), 2635 2638 OP("psrld %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLD, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2636 INVALID_OPCODE_MOD_RM ,2639 INVALID_OPCODE_MOD_RM(0x), 2637 2640 OP("psrad %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRAD, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2638 INVALID_OPCODE_MOD_RM ,2641 INVALID_OPCODE_MOD_RM(0x), 2639 2642 OP("pslld %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLD, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2640 INVALID_OPCODE_MOD_RM ,2643 INVALID_OPCODE_MOD_RM(0x), 2641 2644 2642 2645 /* Group 13 with prefix 0x66 */ 2643 INVALID_OPCODE_MOD_RM ,2644 INVALID_OPCODE_MOD_RM ,2646 INVALID_OPCODE_MOD_RM(0x), 2647 INVALID_OPCODE_MOD_RM(0x), 2645 2648 OP("psrld %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLD, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2646 INVALID_OPCODE_MOD_RM ,2649 INVALID_OPCODE_MOD_RM(0x), 2647 2650 OP("psrad %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRAD, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2648 INVALID_OPCODE_MOD_RM ,2651 INVALID_OPCODE_MOD_RM(0x), 2649 2652 OP("pslld %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLD, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2650 INVALID_OPCODE_MOD_RM ,2653 INVALID_OPCODE_MOD_RM(0x), 2651 2654 }; 2652 2655 … … 2654 2657 const DISOPCODE g_aMapX86_Group14[8*2] = 2655 2658 { 2656 INVALID_OPCODE_MOD_RM ,2657 INVALID_OPCODE_MOD_RM ,2659 INVALID_OPCODE_MOD_RM(0x), 2660 INVALID_OPCODE_MOD_RM(0x), 2658 2661 OP("psrlq %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLQ, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2659 INVALID_OPCODE_MOD_RM ,2660 INVALID_OPCODE_MOD_RM ,2661 INVALID_OPCODE_MOD_RM ,2662 INVALID_OPCODE_MOD_RM(0x), 2663 INVALID_OPCODE_MOD_RM(0x), 2664 INVALID_OPCODE_MOD_RM(0x), 2662 2665 OP("psllq %Pq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLQ, OP_PARM_Pq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2663 INVALID_OPCODE_MOD_RM ,2666 INVALID_OPCODE_MOD_RM(0x), 2664 2667 2665 2668 /* Group 14 with prefix 0x66 */ 2666 INVALID_OPCODE_MOD_RM ,2667 INVALID_OPCODE_MOD_RM ,2669 INVALID_OPCODE_MOD_RM(0x), 2670 INVALID_OPCODE_MOD_RM(0x), 2668 2671 OP("psrlq %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLD, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2669 2672 OP("psrldq %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSRLDQ, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2670 INVALID_OPCODE_MOD_RM ,2671 INVALID_OPCODE_MOD_RM ,2673 INVALID_OPCODE_MOD_RM(0x), 2674 INVALID_OPCODE_MOD_RM(0x), 2672 2675 OP("psllq %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLD, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2673 2676 OP("pslldq %Wdq,%Ib", IDX_ParseModRM, IDX_ParseImmByte,0, OP_PSLLDQ, OP_PARM_Wdq, OP_PARM_Ib, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 2682 2685 OP("ldmxcsr %M", IDX_ParseModRM, 0, 0, OP_LDMXCSR, OP_PARM_M, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2683 2686 OP("stmxcsr %M", IDX_ParseModRM, 0, 0, OP_STMXCSR, OP_PARM_M, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2684 INVALID_OPCODE_MOD_RM ,2685 INVALID_OPCODE_MOD_RM ,2686 INVALID_OPCODE_MOD_RM ,2687 INVALID_OPCODE_MOD_RM(0x), 2688 INVALID_OPCODE_MOD_RM(0x), 2689 INVALID_OPCODE_MOD_RM(0x), 2687 2690 OP("clflush %Mb", IDX_ParseModRM, 0, 0, OP_CLFLUSH, OP_PARM_Mb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2688 2691 }; … … 2691 2694 const DISOPCODE g_aMapX86_Group15_mod11_rm000[8] = 2692 2695 { 2693 INVALID_OPCODE_MOD_RM ,2694 INVALID_OPCODE_MOD_RM ,2695 INVALID_OPCODE_MOD_RM ,2696 INVALID_OPCODE_MOD_RM ,2697 INVALID_OPCODE_MOD_RM ,2696 INVALID_OPCODE_MOD_RM(0x), 2697 INVALID_OPCODE_MOD_RM(0x), 2698 INVALID_OPCODE_MOD_RM(0x), 2699 INVALID_OPCODE_MOD_RM(0x), 2700 INVALID_OPCODE_MOD_RM(0x), 2698 2701 OP("lfence", IDX_ParseModFence, 0, 0, OP_LFENCE, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2699 2702 OP("mfence", IDX_ParseModFence, 0, 0, OP_MFENCE, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), … … 2708 2711 OP("prefetcht1 %Mb", IDX_ParseModRM, 0, 0, OP_PREFETCH,OP_PARM_Mb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2709 2712 OP("prefetcht2 %Mb", IDX_ParseModRM, 0, 0, OP_PREFETCH,OP_PARM_Mb, OP_PARM_NONE, OP_PARM_NONE, DISOPTYPE_HARMLESS), 2710 INVALID_OPCODE_MOD_RM ,2711 INVALID_OPCODE_MOD_RM ,2712 INVALID_OPCODE_MOD_RM ,2713 INVALID_OPCODE_MOD_RM ,2713 INVALID_OPCODE_MOD_RM(0x), 2714 INVALID_OPCODE_MOD_RM(0x), 2715 INVALID_OPCODE_MOD_RM(0x), 2716 INVALID_OPCODE_MOD_RM(0x), 2714 2717 }; 2715 2718 -
trunk/src/VBox/Disassembler/testcase/tstDisasm-1A.asm
r41751 r41863 85 85 pause 86 86 nop 87 ;pfmulhrw mm0, qword [ds:ebp+edi*8+00f000001h] 88 db 0x3e, 0xf, 0xf, 0x84, 0xfd, 0x1, 0x0, 0x0, 0xf, 0xb7 87 89 ENDPROC TestProc32 88 90 -
trunk/src/VBox/Disassembler/testcase/tstDisasm-2.cpp
r41790 r41863 399 399 case 'f': return 0xf; 400 400 default: 401 RTPrintf("error: Invalid hex digi g'%c'\n", ch);401 RTPrintf("error: Invalid hex digit '%c'\n", ch); 402 402 return -1; 403 403 } … … 580 580 /** @todo this stuff belongs in IPRT, same stuff as mac address reading. Could be reused for IPv6 with a different item size.*/ 581 581 /* skip white space, and for the benefit of linux panics '<' and '>'. */ 582 while (RT_C_IS_SPACE(ch2 = *psz) || ch2 == '<' || ch2 == '>' )582 while (RT_C_IS_SPACE(ch2 = *psz) || ch2 == '<' || ch2 == '>' || ch2 == ',' || ch2 == ';') 583 583 { 584 584 if (ch2 == '<') … … 586 586 psz++; 587 587 } 588 589 if (ch2 == '0' && (psz[1] == 'x' || psz[1] == 'X')) 590 { 591 psz += 2; 592 ch2 = *psz; 593 } 594 588 595 if (!ch2) 589 596 break; … … 593 600 if (iNum == -1) 594 601 return 1; 595 if (!RT_C_IS_SPACE(ch2 = *psz) && ch2 != '\0' && ch2 != '>' )602 if (!RT_C_IS_SPACE(ch2 = *psz) && ch2 != '\0' && ch2 != '>' && ch2 != ',' && ch2 != ';') 596 603 { 597 604 int iDigit = HexDigitToNum(*psz++);
Note:
See TracChangeset
for help on using the changeset viewer.