Lines Matching defs:offInstr

235 static DECLCALLBACK(int) disReadBytesDefault(PDISSTATE pDis, uint8_t offInstr, uint8_t cbMinRead, uint8_t cbMaxRead)
240 RT_BZERO(&pDis->abInstr[offInstr], cbMaxRead);
241 pDis->cbCachedInstr = offInstr + cbMaxRead;
244 uint8_t const *pbSrc = (uint8_t const *)(uintptr_t)pDis->uInstrAddr + offInstr;
251 memcpy(&pDis->abInstr[offInstr], pbSrc, cbToRead);
252 pDis->cbCachedInstr = offInstr + cbToRead;
267 * @param offInstr The offset of the read request.
271 DECL_NO_INLINE(static, void) disReadMore(PDISSTATE pDis, uint8_t offInstr, uint8_t cbMin)
273 Assert(cbMin + offInstr <= sizeof(pDis->abInstr));
279 if (offInstr < pDis->cbCachedInstr)
281 Assert(offInstr + cbMin > pDis->cbCachedInstr);
282 cbMin -= pDis->cbCachedInstr - offInstr;
283 offInstr = pDis->cbCachedInstr;
285 else if (offInstr > pDis->cbCachedInstr)
287 cbMin += offInstr - pDis->cbCachedInstr;
288 offInstr = pDis->cbCachedInstr;
296 int rc = pDis->pfnReadBytes(pDis, offInstr, cbMin, sizeof(pDis->abInstr) - offInstr);
299 Assert(pDis->cbCachedInstr >= offInstr + cbMin);
315 * @param offInstr The offset of the byte relative to the
318 DECL_NO_INLINE(static, uint8_t) disReadByteSlow(PDISSTATE pDis, size_t offInstr)
320 if (RT_UNLIKELY(offInstr >= DIS_MAX_INSTR_LENGTH))
324 RTINTPTR cbLeft = sizeof(pDis->abInstr) - offInstr;
326 return pDis->abInstr[offInstr];
330 disReadMore(pDis, (uint8_t)offInstr, 1);
331 return pDis->abInstr[offInstr];
342 DECLINLINE(uint8_t) disReadByte(PDISSTATE pDis, size_t offInstr)
344 if (RT_UNLIKELY(offInstr >= pDis->cbCachedInstr))
345 return disReadByteSlow(pDis, offInstr);
347 return pDis->abInstr[offInstr];
356 * @param offInstr The offset of the word relative to the
359 DECL_NO_INLINE(static, uint16_t) disReadWordSlow(PDISSTATE pDis, size_t offInstr)
361 if (RT_UNLIKELY(offInstr + 2 > DIS_MAX_INSTR_LENGTH))
365 RTINTPTR cbLeft = sizeof(pDis->abInstr) - offInstr;
369 return pDis->abInstr[offInstr];
372 return RT_MAKE_U16(pDis->abInstr[offInstr], pDis->abInstr[offInstr + 1]);
377 disReadMore(pDis, (uint8_t)offInstr, 2);
379 return *(uint16_t const *)&pDis->abInstr[offInstr];
381 return RT_MAKE_U16(pDis->abInstr[offInstr], pDis->abInstr[offInstr + 1]);
391 * @param offInstr The offset of the qword relative to the
394 DECLINLINE(uint16_t) disReadWord(PDISSTATE pDis, size_t offInstr)
396 if (RT_UNLIKELY(offInstr + 2 > pDis->cbCachedInstr))
397 return disReadWordSlow(pDis, offInstr);
400 return *(uint16_t const *)&pDis->abInstr[offInstr];
402 return RT_MAKE_U16(pDis->abInstr[offInstr], pDis->abInstr[offInstr + 1]);
412 * @param offInstr The offset of the dword relative to the
415 DECL_NO_INLINE(static, uint32_t) disReadDWordSlow(PDISSTATE pDis, size_t offInstr)
417 if (RT_UNLIKELY(offInstr + 4 > DIS_MAX_INSTR_LENGTH))
421 RTINTPTR cbLeft = sizeof(pDis->abInstr) - offInstr;
425 return RT_MAKE_U32_FROM_U8(pDis->abInstr[offInstr], 0, 0, 0);
427 return RT_MAKE_U32_FROM_U8(pDis->abInstr[offInstr], pDis->abInstr[offInstr + 1], 0, 0);
429 return RT_MAKE_U32_FROM_U8(pDis->abInstr[offInstr], pDis->abInstr[offInstr + 1], pDis->abInstr[offInstr + 2], 0);
432 return RT_MAKE_U32_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
433 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3]);
438 disReadMore(pDis, (uint8_t)offInstr, 4);
440 return *(uint32_t const *)&pDis->abInstr[offInstr];
442 return RT_MAKE_U32_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
443 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3]);
453 * @param offInstr The offset of the qword relative to the
456 DECLINLINE(uint32_t) disReadDWord(PDISSTATE pDis, size_t offInstr)
458 if (RT_UNLIKELY(offInstr + 4 > pDis->cbCachedInstr))
459 return disReadDWordSlow(pDis, offInstr);
462 return *(uint32_t const *)&pDis->abInstr[offInstr];
464 return RT_MAKE_U32_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
465 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3]);
475 * @param offInstr The offset of the qword relative to the
478 DECL_NO_INLINE(static, uint64_t) disReadQWordSlow(PDISSTATE pDis, size_t offInstr)
480 if (RT_UNLIKELY(offInstr + 8 > DIS_MAX_INSTR_LENGTH))
484 RTINTPTR cbLeft = sizeof(pDis->abInstr) - offInstr;
488 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr], 0, 0, 0, 0, 0, 0, 0);
490 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr], pDis->abInstr[offInstr + 1], 0, 0, 0, 0, 0, 0);
492 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
493 pDis->abInstr[offInstr + 2], 0, 0, 0, 0, 0);
495 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
496 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
499 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
500 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
501 pDis->abInstr[offInstr + 4], 0, 0, 0);
503 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
504 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
505 pDis->abInstr[offInstr + 4], pDis->abInstr[offInstr + 5],
508 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
509 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
510 pDis->abInstr[offInstr + 4], pDis->abInstr[offInstr + 5],
511 pDis->abInstr[offInstr + 6], 0);
514 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
515 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
516 pDis->abInstr[offInstr + 4], pDis->abInstr[offInstr + 5],
517 pDis->abInstr[offInstr + 6], pDis->abInstr[offInstr + 7]);
522 disReadMore(pDis, (uint8_t)offInstr, 8);
524 return *(uint64_t const *)&pDis->abInstr[offInstr];
526 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
527 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
528 pDis->abInstr[offInstr + 4], pDis->abInstr[offInstr + 5],
529 pDis->abInstr[offInstr + 6], pDis->abInstr[offInstr + 7]);
541 DECLINLINE(uint64_t) disReadQWord(PDISSTATE pDis, size_t offInstr)
543 if (RT_UNLIKELY(offInstr + 8 > pDis->cbCachedInstr))
544 return disReadQWordSlow(pDis, offInstr);
547 return *(uint64_t const *)&pDis->abInstr[offInstr];
549 return RT_MAKE_U64_FROM_U8(pDis->abInstr[offInstr ], pDis->abInstr[offInstr + 1],
550 pDis->abInstr[offInstr + 2], pDis->abInstr[offInstr + 3],
551 pDis->abInstr[offInstr + 4], pDis->abInstr[offInstr + 5],
552 pDis->abInstr[offInstr + 6], pDis->abInstr[offInstr + 7]);
560 static size_t disParseInstruction(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis)
610 offInstr = pDis->pfnDisasmFnTable[pOp->idxParse1](offInstr, pOp, pDis, &pDis->Param1);
616 offInstr = pDis->pfnDisasmFnTable[pOp->idxParse2](offInstr, pOp, pDis, &pDis->Param2);
622 offInstr = pDis->pfnDisasmFnTable[pOp->idxParse3](offInstr, pOp, pDis, &pDis->Param3);
628 offInstr = pDis->pfnDisasmFnTable[pOp->idxParse4](offInstr, pOp, pDis, &pDis->Param4);
633 return offInstr;
638 static size_t ParseEscFP(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
643 uint8_t ModRM = disReadByte(pDis, offInstr);
684 offInstr++; //ModRM byte
687 offInstr = pDis->pfnDisasmFnTable[fpop->idxParse1](offInstr, fpop, pDis, pParam);
690 offInstr = pDis->pfnDisasmFnTable[fpop->idxParse2](offInstr, fpop, pDis, pParam);
692 return offInstr;
760 static size_t ParseSIB(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
764 uint8_t SIB = disReadByte(pDis, offInstr);
765 offInstr++;
784 pDis->i32SibDisp = disReadDWord(pDis, offInstr);
785 offInstr += 4;
787 return offInstr;
791 static size_t ParseSIB_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
795 uint8_t SIB = disReadByte(pDis, offInstr);
796 offInstr++;
814 offInstr += 4;
816 return offInstr;
936 static size_t UseModRM(size_t const offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
947 return offInstr;
966 return offInstr;
971 return offInstr;
983 return offInstr;
989 return offInstr;
995 return offInstr;
1020 return offInstr;
1124 return offInstr;
1129 static size_t QueryModRM(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1142 offInstr = ParseSIB(offInstr, pOp, pDis, pParam);
1149 pDis->i32SibDisp = disReadDWord(pDis, offInstr);
1150 offInstr += 4;
1156 pDis->i32SibDisp = (int8_t)disReadByte(pDis, offInstr);
1157 offInstr++;
1161 pDis->i32SibDisp = disReadDWord(pDis, offInstr);
1162 offInstr += 4;
1177 pDis->i32SibDisp = disReadWord(pDis, offInstr);
1178 offInstr += 2;
1184 pDis->i32SibDisp = (int8_t)disReadByte(pDis, offInstr);
1185 offInstr++;
1189 pDis->i32SibDisp = (int16_t)disReadWord(pDis, offInstr);
1190 offInstr += 2;
1197 return offInstr;
1202 static size_t QueryModRM_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1215 offInstr = ParseSIB_SizeOnly(offInstr, pOp, pDis, pParam);
1222 offInstr += 4;
1227 offInstr += 1;
1231 offInstr += 4;
1245 offInstr += 2;
1250 offInstr++;
1254 offInstr += 2;
1261 return offInstr;
1265 static size_t ParseIllegal(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1269 return offInstr;
1273 static size_t ParseModRM(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1275 uint8_t ModRM = disReadByte(pDis, offInstr);
1276 offInstr++;
1308 offInstr = QueryModRM(offInstr, pOp, pDis, pParam);
1310 return UseModRM(offInstr, pOp, pDis, pParam);
1314 static size_t ParseModRM_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1316 uint8_t ModRM = disReadByte(pDis, offInstr);
1317 offInstr++;
1350 offInstr = QueryModRM_SizeOnly(offInstr, pOp, pDis, pParam);
1353 return offInstr;
1357 static size_t ParseModFence(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1361 return offInstr + 1;
1365 static size_t ParseImmByte(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1368 uint8_t byte = disReadByte(pDis, offInstr);
1385 return offInstr + 1;
1389 static size_t ParseImmByte_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1392 return offInstr + 1;
1396 static size_t ParseImmByteSX(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1401 pParam->uValue = (uint32_t)(int8_t)disReadByte(pDis, offInstr);
1408 pParam->uValue = (uint64_t)(int8_t)disReadByte(pDis, offInstr);
1414 pParam->uValue = (uint16_t)(int8_t)disReadByte(pDis, offInstr);
1418 return offInstr + 1;
1422 static size_t ParseImmByteSX_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1425 return offInstr + 1;
1429 static size_t ParseImmUshort(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1432 pParam->uValue = disReadWord(pDis, offInstr);
1435 return offInstr + 2;
1439 static size_t ParseImmUshort_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1442 return offInstr + 2;
1446 static size_t ParseImmUlong(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1449 pParam->uValue = disReadDWord(pDis, offInstr);
1452 return offInstr + 4;
1456 static size_t ParseImmUlong_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1459 return offInstr + 4;
1463 static size_t ParseImmQword(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1466 pParam->uValue = disReadQWord(pDis, offInstr);
1469 return offInstr + 8;
1473 static size_t ParseImmQword_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1475 NOREF(offInstr); NOREF(pOp); NOREF(pParam); NOREF(pDis);
1476 return offInstr + 8;
1480 static size_t ParseImmV(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1485 pParam->uValue = disReadDWord(pDis, offInstr);
1488 return offInstr + 4;
1493 pParam->uValue = disReadQWord(pDis, offInstr);
1496 return offInstr + 8;
1499 pParam->uValue = disReadWord(pDis, offInstr);
1502 return offInstr + 2;
1506 static size_t ParseImmV_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1508 NOREF(offInstr); NOREF(pOp); NOREF(pParam);
1510 return offInstr + 4;
1512 return offInstr + 8;
1513 return offInstr + 2;
1517 static size_t ParseImmZ(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1523 pParam->uValue = disReadWord(pDis, offInstr);
1526 return offInstr + 2;
1532 pParam->uValue = (uint64_t)(int32_t)disReadDWord(pDis, offInstr);
1538 pParam->uValue = disReadDWord(pDis, offInstr);
1542 return offInstr + 4;
1546 static size_t ParseImmZ_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1548 NOREF(offInstr); NOREF(pOp); NOREF(pParam);
1551 return offInstr + 2;
1552 return offInstr + 4;
1558 static size_t ParseImmBRel(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1561 pParam->uValue = disReadByte(pDis, offInstr);
1564 return offInstr + 1;
1569 static size_t ParseImmBRel_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1571 NOREF(offInstr); NOREF(pOp); NOREF(pParam); NOREF(pDis);
1572 return offInstr + 1;
1577 static size_t ParseImmVRel(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1582 pParam->uValue = disReadDWord(pDis, offInstr);
1585 return offInstr + 4;
1591 pParam->uValue = (uint64_t)(int32_t)disReadDWord(pDis, offInstr);
1594 return offInstr + 4;
1597 pParam->uValue = disReadWord(pDis, offInstr);
1600 return offInstr + 2;
1605 static size_t ParseImmVRel_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1607 NOREF(offInstr); NOREF(pOp); NOREF(pParam);
1609 return offInstr + 2;
1611 return offInstr + 4;
1615 static size_t ParseImmAddr(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1623 pParam->uValue = disReadDWord(pDis, offInstr);
1624 *((uint32_t*)&pParam->uValue+1) = disReadWord(pDis, offInstr+sizeof(uint32_t));
1627 return offInstr + 4 + 2;
1636 pParam->uDisp.i32 = disReadDWord(pDis, offInstr);
1639 return offInstr + 4;
1651 pParam->uDisp.i64 = disReadQWord(pDis, offInstr);
1654 return offInstr + 8;
1659 pParam->uValue = disReadDWord(pDis, offInstr);
1662 return offInstr + 4;
1671 pParam->uDisp.i16 = disReadWord(pDis, offInstr);
1674 return offInstr + 2;
1678 static size_t ParseImmAddr_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1680 NOREF(offInstr); NOREF(pOp);
1684 return offInstr + 4 + 2; /* far 16:32 pointer */
1685 return offInstr + 4; /* near 32 bits pointer */
1690 return offInstr + 8;
1693 return offInstr + 4; /* far 16:16 pointer */
1694 return offInstr + 2; /* near 16 bits pointer */
1698 static size_t ParseImmAddrF(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1707 pParam->uValue = disReadDWord(pDis, offInstr);
1708 *((uint32_t*)&pParam->uValue+1) = disReadWord(pDis, offInstr+sizeof(uint32_t));
1711 return offInstr + 4 + 2;
1715 pParam->uValue = disReadDWord(pDis, offInstr);
1718 return offInstr + 2 + 2;
1722 static size_t ParseImmAddrF_SizeOnly(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1724 NOREF(offInstr); NOREF(pOp);
1729 return offInstr + 4 + 2; /* far 16:32 pointer */
1730 return offInstr + 2 + 2; /* far 16:16 pointer */
1734 static size_t ParseFixedReg(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1736 NOREF(offInstr);
1745 return offInstr;
1832 return offInstr;
1836 static size_t ParseXv(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1857 return offInstr;
1861 static size_t ParseXb(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1882 return offInstr;
1886 static size_t ParseYv(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1907 return offInstr;
1911 static size_t ParseYb(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1932 return offInstr;
1936 static size_t ParseInvOpModRm(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1941 return offInstr + 1;
1945 static size_t ParseVexDest(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1975 return offInstr;
1979 static size_t ParseTwoByteEsc(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
1984 pDis->bOpCode = disReadByte(pDis, offInstr);
1985 offInstr++;
2038 return disParseInstruction(offInstr, pOpcode, pDis);
2042 static size_t ParseThreeByteEsc4(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2047 pDis->bOpCode = disReadByte(pDis, offInstr);
2048 offInstr++;
2140 return disParseInstruction(offInstr, pOpcode, pDis);
2144 static size_t ParseThreeByteEsc5(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2149 pDis->bOpCode = disReadByte(pDis, offInstr);
2150 offInstr++;
2184 return disParseInstruction(offInstr, pOpcode, pDis);
2188 static size_t ParseNopPause(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2200 return disParseInstruction(offInstr, pOp, pDis);
2204 static size_t ParseImmGrpl(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2208 uint8_t modrm = disReadByte(pDis, offInstr);
2214 return disParseInstruction(offInstr, pOp, pDis);
2218 static size_t ParseShiftGrp2(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2240 return offInstr;
2243 uint8_t modrm = disReadByte(pDis, offInstr);
2248 return disParseInstruction(offInstr, pOp, pDis);
2252 static size_t ParseGrp3(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2257 uint8_t modrm = disReadByte(pDis, offInstr);
2262 return disParseInstruction(offInstr, pOp, pDis);
2266 static size_t ParseGrp4(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2270 uint8_t modrm = disReadByte(pDis, offInstr);
2275 return disParseInstruction(offInstr, pOp, pDis);
2279 static size_t ParseGrp5(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2283 uint8_t modrm = disReadByte(pDis, offInstr);
2288 return disParseInstruction(offInstr, pOp, pDis);
2296 static size_t Parse3DNow(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2300 uint8_t ModRM = disReadByte(pDis, offInstr);
2305 size_t offRet = QueryModRM(offInstr + 1, pOp, pDis, pParam);
2311 size_t offStrict = disParseInstruction(offInstr, pOp, pDis);
2321 static size_t ParseGrp6(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2325 uint8_t modrm = disReadByte(pDis, offInstr);
2330 return disParseInstruction(offInstr, pOp, pDis);
2334 static size_t ParseGrp7(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2338 uint8_t modrm = disReadByte(pDis, offInstr);
2354 offInstr++;
2356 return disParseInstruction(offInstr, pOp, pDis);
2360 static size_t ParseGrp8(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2364 uint8_t modrm = disReadByte(pDis, offInstr);
2369 return disParseInstruction(offInstr, pOp, pDis);
2373 static size_t ParseGrp9(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2377 uint8_t modrm = disReadByte(pDis, offInstr);
2382 return disParseInstruction(offInstr, pOp, pDis);
2386 static size_t ParseGrp10(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2390 uint8_t modrm = disReadByte(pDis, offInstr);
2395 return disParseInstruction(offInstr, pOp, pDis);
2399 static size_t ParseGrp12(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2403 uint8_t modrm = disReadByte(pDis, offInstr);
2411 return disParseInstruction(offInstr, pOp, pDis);
2415 static size_t ParseGrp13(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2419 uint8_t modrm = disReadByte(pDis, offInstr);
2426 return disParseInstruction(offInstr, pOp, pDis);
2430 static size_t ParseGrp14(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2434 uint8_t modrm = disReadByte(pDis, offInstr);
2441 return disParseInstruction(offInstr, pOp, pDis);
2445 static size_t ParseGrp15(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2449 uint8_t modrm = disReadByte(pDis, offInstr);
2459 return disParseInstruction(offInstr, pOp, pDis);
2463 static size_t ParseGrp16(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2467 uint8_t modrm = disReadByte(pDis, offInstr);
2470 return disParseInstruction(offInstr, pOp, pDis);
2474 static size_t ParseVex2b(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2480 uint8_t byte = disReadByte(pDis, offInstr++);
2481 pDis->bOpCode = disReadByte(pDis, offInstr++);
2517 return disParseInstruction(offInstr, pOpCode, pDis);
2521 static size_t ParseVex3b(size_t offInstr, PCDISOPCODE pOp, PDISSTATE pDis, PDISOPPARAM pParam)
2527 uint8_t byte1 = disReadByte(pDis, offInstr++);
2528 uint8_t byte2 = disReadByte(pDis, offInstr++);
2529 pDis->bOpCode = disReadByte(pDis, offInstr++);
2629 return disParseInstruction(offInstr, pOpCode, pDis);
2727 size_t offInstr = 0;
2730 uint8_t codebyte = disReadByte(pDis, offInstr++);
2748 *pcbInstr = (uint32_t)offInstr;
2815 && (disReadByte(pDis, offInstr) & 0xc0) == 0xc0)
2822 pDis->cbPrefix = (uint8_t)offInstr - 1;
2824 offInstr = disParseInstruction(offInstr, &paOneByteMap[pDis->bOpCode], pDis);
2828 pDis->cbInstr = (uint8_t)offInstr;
2830 *pcbInstr = (uint32_t)offInstr;