- Timestamp:
- Oct 14, 2008 9:30:41 AM (16 years ago)
- Location:
- trunk/src/VBox/Disassembler
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Disassembler/DisasmCore.cpp
r12790 r13241 113 113 ParseNopPause, 114 114 ParseImmByteSX, 115 ParseImmZ 115 ParseImmZ, 116 ParseThreeByteEsc4, 117 ParseThreeByteEsc5 116 118 }; 117 119 … … 155 157 ParseNopPause, 156 158 ParseImmByteSX_SizeOnly, 157 ParseImmZ_SizeOnly 159 ParseImmZ_SizeOnly, 160 ParseThreeByteEsc4, 161 ParseThreeByteEsc5 158 162 }; 159 163 … … 1729 1733 int size = sizeof(uint8_t); 1730 1734 1731 / /2nd byte1735 /* 2nd byte */ 1732 1736 pCpu->opcode = DISReadByte(pCpu, lpszCodeBlock); 1737 1738 /* default to the non-prefixed table. */ 1733 1739 pOpcode = &g_aTwoByteMapX86[pCpu->opcode]; 1734 1740 … … 1774 1780 } 1775 1781 } 1782 1783 size += ParseInstruction(lpszCodeBlock+size, pOpcode, pCpu); 1784 return size; 1785 } 1786 //***************************************************************************** 1787 //***************************************************************************** 1788 unsigned ParseThreeByteEsc4(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu) 1789 { 1790 const OPCODE *pOpcode; 1791 int size = sizeof(uint8_t); 1792 1793 /* 3rd byte */ 1794 pCpu->opcode = DISReadByte(pCpu, lpszCodeBlock); 1795 1796 /* default to the non-prefixed table. */ 1797 if (g_apThreeByteMapX86_0F38[pCpu->opcode >> 4]) 1798 { 1799 pOpcode = g_apThreeByteMapX86_0F38[pCpu->opcode >> 4]; 1800 pOpcode = &pOpcode[pCpu->opcode & 0xf]; 1801 } 1802 else 1803 pOpcode = &g_InvalidOpcode[0]; 1804 1805 /* Handle opcode table extensions that rely on the address, repne prefix byte. */ 1806 /** @todo Should we take the first or last prefix byte in case of multiple prefix bytes??? */ 1807 switch (pCpu->lastprefix) 1808 { 1809 case OP_OPSIZE: /* 0x66 */ 1810 if (g_apThreeByteMapX86_660F38[pCpu->opcode >> 4]) 1811 { 1812 pOpcode = g_apThreeByteMapX86_660F38[pCpu->opcode >> 4]; 1813 pOpcode = &pOpcode[pCpu->opcode & 0xf]; 1814 1815 if (pOpcode->opcode != OP_INVALID) 1816 { 1817 /* Table entry is valid, so use the extension table. */ 1818 1819 /* Cancel prefix changes. */ 1820 pCpu->prefix &= ~PREFIX_OPSIZE; 1821 pCpu->opmode = pCpu->mode; 1822 } 1823 } 1824 break; 1825 1826 case OP_REPNE: /* 0xF2 */ 1827 if (g_apThreeByteMapX86_F20F38[pCpu->opcode >> 4]) 1828 { 1829 pOpcode = g_apThreeByteMapX86_F20F38[pCpu->opcode >> 4]; 1830 pOpcode = &pOpcode[pCpu->opcode & 0xf]; 1831 1832 if (pOpcode->opcode != OP_INVALID) 1833 { 1834 /* Table entry is valid, so use the extension table. */ 1835 1836 /* Cancel prefix changes. */ 1837 pCpu->prefix &= ~PREFIX_REPNE; 1838 } 1839 } 1840 break; 1841 } 1842 1843 size += ParseInstruction(lpszCodeBlock+size, pOpcode, pCpu); 1844 return size; 1845 } 1846 //***************************************************************************** 1847 //***************************************************************************** 1848 unsigned ParseThreeByteEsc5(RTUINTPTR lpszCodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu) 1849 { 1850 const OPCODE *pOpcode; 1851 int size = sizeof(uint8_t); 1852 1853 /* 3rd byte */ 1854 pCpu->opcode = DISReadByte(pCpu, lpszCodeBlock); 1855 1856 /** @todo Should we take the first or last prefix byte in case of multiple prefix bytes??? */ 1857 Assert(pCpu->lastprefix == OP_OPSIZE); 1858 1859 /* default to the non-prefixed table. */ 1860 if (g_apThreeByteMapX86_660F3A[pCpu->opcode >> 4]) 1861 { 1862 pOpcode = g_apThreeByteMapX86_660F3A[pCpu->opcode >> 4]; 1863 pOpcode = &pOpcode[pCpu->opcode & 0xf]; 1864 1865 if (pOpcode->opcode != OP_INVALID) 1866 { 1867 /* Table entry is valid, so use the extension table. */ 1868 1869 /* Cancel prefix changes. */ 1870 pCpu->prefix &= ~PREFIX_OPSIZE; 1871 pCpu->opmode = pCpu->mode; 1872 } 1873 } 1874 else 1875 pOpcode = &g_InvalidOpcode[0]; 1776 1876 1777 1877 size += ParseInstruction(lpszCodeBlock+size, pOpcode, pCpu); -
trunk/src/VBox/Disassembler/DisasmInternal.h
r9761 r13241 70 70 #define IDX_ParseImmByteSX 36 71 71 #define IDX_ParseImmZ 37 72 #define IDX_ParseMax (IDX_ParseImmZ+1) 72 #define IDX_ParseThreeByteEsc4 38 73 #define IDX_ParseThreeByteEsc5 39 74 #define IDX_ParseMax (IDX_ParseThreeByteEsc5+1) 73 75 74 76 #ifdef IN_RING0 … … 117 119 118 120 unsigned ParseTwoByteEsc(RTUINTPTR pu8CodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu); 121 unsigned ParseThreeByteEsc4(RTUINTPTR pu8CodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu); 122 unsigned ParseThreeByteEsc5(RTUINTPTR pu8CodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu); 119 123 unsigned ParseImmGrpl(RTUINTPTR pu8CodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu); 120 124 unsigned ParseShiftGrp2(RTUINTPTR pu8CodeBlock, PCOPCODE pOp, POP_PARAMETER pParam, PDISCPUSTATE pCpu); -
trunk/src/VBox/Disassembler/DisasmTables.cpp
r13088 r13241 79 79 INVALID_OPCODE, 80 80 81 /* Invalid opcode */ 82 const OPCODE g_InvalidOpcode[1] = 83 { 84 INVALID_OPCODE 85 }; 86 81 87 /* Tables for the elegant Intel X86 instruction set */ 82 83 88 const OPCODE g_aOneByteMapX86[256] = 84 89 { … … 454 459 INVALID_OPCODE, 455 460 INVALID_OPCODE, 456 INVALID_OPCODE,461 OP("3 byte escape A4", IDX_ParseThreeByteEsc4,0, 0, OP_3B_ESC4, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, OPTYPE_HARMLESS), 457 462 INVALID_OPCODE, 458 463 INVALID_OPCODE, … … 725 730 726 731 /* 3 */ 727 #if 1728 INVALID_OPCODE_BLOCK729 #else730 /** @todo */731 732 INVALID_OPCODE, 732 733 INVALID_OPCODE, … … 745 746 INVALID_OPCODE, 746 747 INVALID_OPCODE, 747 #endif748 748 749 749 /* 4 */ … … 932 932 933 933 /* 3 */ 934 INVALID_OPCODE_BLOCK 934 INVALID_OPCODE, 935 INVALID_OPCODE, 936 INVALID_OPCODE, 937 INVALID_OPCODE, 938 INVALID_OPCODE, 939 INVALID_OPCODE, 940 INVALID_OPCODE, 941 INVALID_OPCODE, 942 OP("3 byte escape A4", IDX_ParseThreeByteEsc4,0, 0, OP_3B_ESC4, OP_PARM_NONE, OP_PARM_NONE, OP_PARM_NONE, OPTYPE_HARMLESS), 943 INVALID_OPCODE, 944 INVALID_OPCODE, 945 INVALID_OPCODE, 946 INVALID_OPCODE, 947 INVALID_OPCODE, 948 INVALID_OPCODE, 949 INVALID_OPCODE, 935 950 936 951 /* 4 */ … … 1217 1232 /* f */ 1218 1233 INVALID_OPCODE_BLOCK 1234 }; 1235 1236 /** Three byte opcode map (0xF 0x38 0x0x) */ 1237 const OPCODE g_aThreeByteMapX86_0F38_0[16] = 1238 { 1239 /* 0 */ 1240 OP("pshufb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSHUFB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1241 OP("phaddw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHADDW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1242 OP("phaddd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHADDD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1243 OP("phaddsw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHADDSW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1244 OP("pmaddubsw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMADDUBSW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1245 OP("phsubw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHSUBW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1246 OP("phsubd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHSUBD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1247 OP("phsubsw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHSUBSW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1248 OP("psignb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSIGNB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1249 OP("psignw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSIGNW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1250 OP("psignd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSIGND, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1251 OP("pmulhrsw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULHRSW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1252 INVALID_OPCODE, 1253 INVALID_OPCODE, 1254 INVALID_OPCODE, 1255 INVALID_OPCODE, 1256 }; 1257 1258 /** Three byte opcode map (0x0F 0x38 0x1x) */ 1259 const OPCODE g_aThreeByteMapX86_0F38_1[16] = 1260 { 1261 /* 1 */ 1262 INVALID_OPCODE, 1263 INVALID_OPCODE, 1264 INVALID_OPCODE, 1265 INVALID_OPCODE, 1266 INVALID_OPCODE, 1267 INVALID_OPCODE, 1268 INVALID_OPCODE, 1269 INVALID_OPCODE, 1270 INVALID_OPCODE, 1271 INVALID_OPCODE, 1272 INVALID_OPCODE, 1273 INVALID_OPCODE, 1274 OP("pabsb %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PABSB, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1275 OP("pabsw %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PABSW, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1276 OP("pabsd %Pq,%Qq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PABSD, OP_PARM_Pq, OP_PARM_Qq, OP_PARM_NONE, OPTYPE_HARMLESS), 1277 INVALID_OPCODE, 1278 }; 1279 1280 /* These tables are mostly sparse, so use another level of indirection to save space. */ 1281 const OPCODE *g_apThreeByteMapX86_0F38[16] = 1282 { 1283 /* 0 */ 1284 &g_aThreeByteMapX86_0F38_0[0], 1285 1286 /* 1 */ 1287 &g_aThreeByteMapX86_0F38_1[0], 1288 1289 /* 2 */ 1290 NULL, 1291 1292 /* 3 */ 1293 NULL, 1294 1295 /* 4 */ 1296 NULL, 1297 1298 /* 5 */ 1299 NULL, 1300 1301 /* 6 */ 1302 NULL, 1303 1304 /* 7 */ 1305 NULL, 1306 1307 /* 8 */ 1308 NULL, 1309 1310 /* 9 */ 1311 NULL, 1312 1313 /* a */ 1314 NULL, 1315 1316 /* b */ 1317 NULL, 1318 1319 /* c */ 1320 NULL, 1321 1322 /* d */ 1323 NULL, 1324 1325 /* e */ 1326 NULL, 1327 1328 /* f */ 1329 NULL, 1330 }; 1331 1332 /** Three byte opcode map (0x66 0x0F 0x38 0x0x) */ 1333 const OPCODE g_aThreeByteMapX86_660F38_0[16] = 1334 { 1335 /* 0 */ 1336 OP("pshufb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSHUFB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1337 OP("phaddw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHADDW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1338 OP("phaddd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHADDD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1339 OP("phaddsw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHADDSW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1340 OP("pmaddubsw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMADDUBSW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1341 OP("phsubw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHSUBW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1342 OP("phsubd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHSUBD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1343 OP("phsubsw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PHSUBSW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1344 OP("psignb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSIGNB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1345 OP("psignw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSIGNW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1346 OP("psignd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PSIGND, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1347 OP("pmulhrsw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PMULHRSW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1348 INVALID_OPCODE, 1349 INVALID_OPCODE, 1350 INVALID_OPCODE, 1351 INVALID_OPCODE, 1352 }; 1353 1354 /** Three byte opcode map (0x66 0x0F 0x38 0x1x) */ 1355 const OPCODE g_aThreeByteMapX86_660F38_1[16] = 1356 { 1357 /* 1 */ 1358 OP("pblendvb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PBLENDVB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1359 INVALID_OPCODE, 1360 INVALID_OPCODE, 1361 INVALID_OPCODE, 1362 OP("blendvps %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_BLENDVPS, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1363 OP("blendvpd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_BLENDVPD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1364 INVALID_OPCODE, 1365 OP("ptest %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PTEST, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1366 INVALID_OPCODE, 1367 INVALID_OPCODE, 1368 INVALID_OPCODE, 1369 INVALID_OPCODE, 1370 OP("pabsb %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PABSB, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1371 OP("pabsw %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PABSW, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1372 OP("pabsd %Vdq,%Wdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_PABSD, OP_PARM_Vdq, OP_PARM_Wdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1373 INVALID_OPCODE, 1374 }; 1375 1376 /** @todo remainder missing (too lazy now) */ 1377 1378 /** Three byte opcode map (0x66 0x0F 0x38 0x8x) */ 1379 const OPCODE g_aThreeByteMapX86_660F38_8[16] = 1380 { 1381 /* 8 */ 1382 OP("invept %Gd,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVEPT, OP_PARM_Gd, OP_PARM_Mdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1383 OP("invvpid %Gd,%Mdq", IDX_ParseModRM, IDX_UseModRM, 0, OP_INVEPT, OP_PARM_Gd, OP_PARM_Mdq, OP_PARM_NONE, OPTYPE_HARMLESS), 1384 INVALID_OPCODE, 1385 INVALID_OPCODE, 1386 INVALID_OPCODE, 1387 INVALID_OPCODE, 1388 INVALID_OPCODE, 1389 INVALID_OPCODE, 1390 INVALID_OPCODE, 1391 INVALID_OPCODE, 1392 INVALID_OPCODE, 1393 INVALID_OPCODE, 1394 INVALID_OPCODE, 1395 INVALID_OPCODE, 1396 INVALID_OPCODE, 1397 INVALID_OPCODE, 1398 }; 1399 1400 /** Three byte opcode map with prefix 0x66 (0xF 0x38) */ 1401 const OPCODE *g_apThreeByteMapX86_660F38[16] = 1402 { 1403 /* 0 */ 1404 &g_aThreeByteMapX86_660F38_0[0], 1405 1406 /* 1 */ 1407 &g_aThreeByteMapX86_660F38_1[0], 1408 1409 /* 2 */ 1410 NULL, 1411 1412 /* 3 */ 1413 NULL, 1414 1415 /* 4 */ 1416 NULL, 1417 1418 /* 5 */ 1419 NULL, 1420 1421 /* 6 */ 1422 NULL, 1423 1424 /* 7 */ 1425 NULL, 1426 1427 /* 8 */ 1428 &g_aThreeByteMapX86_660F38_8[0], 1429 1430 /* 9 */ 1431 NULL, 1432 1433 /* a */ 1434 NULL, 1435 1436 /* b */ 1437 NULL, 1438 1439 /* c */ 1440 NULL, 1441 1442 /* d */ 1443 NULL, 1444 1445 /* e */ 1446 NULL, 1447 1448 /* f */ 1449 NULL, 1450 }; 1451 1452 /** Three byte opcode map with prefix 0xF2 (0xF 0x38) */ 1453 /** @todo remainder missing (too lazy now) */ 1454 const OPCODE *g_apThreeByteMapX86_F20F38[16] = 1455 { 1456 /* 0 */ 1457 NULL, 1458 1459 /* 1 */ 1460 NULL, 1461 1462 /* 2 */ 1463 NULL, 1464 1465 /* 3 */ 1466 NULL, 1467 1468 /* 4 */ 1469 NULL, 1470 1471 /* 5 */ 1472 NULL, 1473 1474 /* 6 */ 1475 NULL, 1476 1477 /* 7 */ 1478 NULL, 1479 1480 /* 8 */ 1481 NULL, 1482 1483 /* 9 */ 1484 NULL, 1485 1486 /* a */ 1487 NULL, 1488 1489 /* b */ 1490 NULL, 1491 1492 /* c */ 1493 NULL, 1494 1495 /* d */ 1496 NULL, 1497 1498 /* e */ 1499 NULL, 1500 1501 /* f */ 1502 NULL, 1503 }; 1504 1505 /** Three byte opcode map with prefix 0x66 (0xF 0x3A) */ 1506 /** @todo remainder missing (too lazy now) */ 1507 const OPCODE *g_apThreeByteMapX86_660F3A[16] = 1508 { 1509 /* 0 */ 1510 NULL, 1511 1512 /* 1 */ 1513 NULL, 1514 1515 /* 2 */ 1516 NULL, 1517 1518 /* 3 */ 1519 NULL, 1520 1521 /* 4 */ 1522 NULL, 1523 1524 /* 5 */ 1525 NULL, 1526 1527 /* 6 */ 1528 NULL, 1529 1530 /* 7 */ 1531 NULL, 1532 1533 /* 8 */ 1534 NULL, 1535 1536 /* 9 */ 1537 NULL, 1538 1539 /* a */ 1540 NULL, 1541 1542 /* b */ 1543 NULL, 1544 1545 /* c */ 1546 NULL, 1547 1548 /* d */ 1549 NULL, 1550 1551 /* e */ 1552 NULL, 1553 1554 /* f */ 1555 NULL, 1219 1556 }; 1220 1557 -
trunk/src/VBox/Disassembler/DisasmTables.h
r8299 r13241 26 26 #include <VBox/dis.h> 27 27 28 extern const OPCODE g_InvalidOpcode[1]; 29 28 30 extern const OPCODE g_aOneByteMapX86[256]; 29 31 extern const OPCODE g_aOneByteMapX64[256]; … … 38 40 /** Two byte opcode map with prefix 0xF3 */ 39 41 extern const OPCODE g_aTwoByteMapX86_PFF3[256]; 42 43 /** Three byte opcode map (0xF 0x38) */ 44 extern const OPCODE *g_apThreeByteMapX86_0F38[16]; 45 46 /** Three byte opcode map with prefix 0x66 (0xF 0x38) */ 47 extern const OPCODE *g_apThreeByteMapX86_660F38[16]; 48 49 /** Three byte opcode map with prefix 0xF2 (0xF 0x38) */ 50 extern const OPCODE *g_apThreeByteMapX86_F20F38[16]; 51 52 /** Three byte opcode map with prefix 0x66 (0xF 0x3A) */ 53 extern const OPCODE *g_apThreeByteMapX86_660F3A[16]; 40 54 41 55 /** Opcode extensions (Group tables) -
trunk/src/VBox/Disassembler/DisasmTestA.asm
r11464 r13241 34 34 align 16 35 35 BEGINPROC TestProc 36 ; invept eax, qword [ecx] 37 DB 0x66, 0x0F, 0x38, 0x80, 0x1 38 ; invept eax, qword [ecx] 39 DB 0x66, 0x0F, 0x38, 0x81, 0x1 40 mov eax, dword [ecx] 36 41 mov word [edi], 0123ah 37 42 movzx eax,byte [edx] … … 71 76 align 16 72 77 BEGINPROC TestProc64 78 ; invept rdi, qword [rsi] 79 DB 0x66, 0x0F, 0x38, 0x80, 0x3E 80 ; invept rcx, qword [rdx] 81 DB 0x66, 0x0F, 0x38, 0x80, 0xA 82 ;invvpid rdi, qword [rsi] 83 DB 0x66, 0x0F, 0x38, 0x81, 0x3E 84 ; invvpid rcx, qword [rdx] 85 DB 0x66, 0x0F, 0x38, 0x81, 0xA 86 mov rdi, [rsi] 87 mov rcx, [rdx] 73 88 db 48h 74 89 db 0c7h
Note:
See TracChangeset
for help on using the changeset viewer.