Improved support for MPX instructions

This commit is contained in:
flobernd 2017-10-26 20:10:51 +02:00
parent 4de4def535
commit 38df6e0d1e
10 changed files with 1862 additions and 1732 deletions

View File

@ -46,6 +46,41 @@ extern "C" {
/* Decoded operand */
/* ============================================================================================== */
/* ---------------------------------------------------------------------------------------------- */
/* Memory type */
/* ---------------------------------------------------------------------------------------------- */
/**
* @brief Defines the @c ZydisMemoryOperandType datatype.
*/
typedef uint8_t ZydisMemoryOperandType;
/**
* @brief Values that represent memory-operand types.
*/
enum ZydisMemoryOperandTypes
{
ZYDIS_MEMOP_TYPE_INVALID,
/**
* @brief Normal memory operand.
*/
ZYDIS_MEMOP_TYPE_MEM,
/**
* @brief The memory operand is only used for address-generation. No real memory-access is
* caused.
*/
ZYDIS_MEMOP_TYPE_AGEN,
/**
* @brief A memory operand using `SIB` addressing form, where the index register is not used
* in address calculation and scale is ignored.
*/
ZYDIS_MEMOP_TYPE_MIB
};
/* ---------------------------------------------------------------------------------------------- */
/* Decoded operand */
/* ---------------------------------------------------------------------------------------------- */
/**
* @brief Defines the @c ZydisDecodedOperand struct.
*/
@ -104,9 +139,9 @@ typedef struct ZydisDecodedOperand_
struct
{
/**
* @brief Signals, if the memory operand is only used for address generation.
* @brief The type of the memory operand.
*/
ZydisBool isAddressGenOnly;
ZydisMemoryOperandType type;
/**
* @brief The segment register.
*/
@ -171,6 +206,8 @@ typedef struct ZydisDecodedOperand_
} imm;
} ZydisDecodedOperand;
/* ---------------------------------------------------------------------------------------------- */
/* ============================================================================================== */
/* Decoded instruction */
/* ============================================================================================== */

View File

@ -1096,7 +1096,7 @@ static void ZydisSetOperandSizeAndElementInfo(ZydisDecoderContext* context,
case ZYDIS_INSTRUCTION_ENCODING_3DNOW:
case ZYDIS_INSTRUCTION_ENCODING_XOP:
case ZYDIS_INSTRUCTION_ENCODING_VEX:
if (operand->mem.isAddressGenOnly)
if (operand->mem.type != ZYDIS_MEMOP_TYPE_MEM)
{
ZYDIS_ASSERT(definition->size[context->eoszIndex] == 0);
operand->size = instruction->addressWidth;
@ -1365,6 +1365,7 @@ static ZydisStatus ZydisDecodeOperandMemory(ZydisDecoderContext* context,
((instruction->addressWidth == 32) || (instruction->addressWidth == 64))));
operand->type = ZYDIS_OPERAND_TYPE_MEMORY;
operand->mem.type = ZYDIS_MEMOP_TYPE_MEM;
uint8_t modrm_rm = instruction->raw.modrm.rm;
uint8_t displacementSize = 0;
@ -1864,10 +1865,10 @@ static ZydisStatus ZydisDecodeOperands(ZydisDecoderContext* context,
break;
case ZYDIS_SEMANTIC_OPTYPE_AGEN:
instruction->operands[i].action = ZYDIS_OPERAND_ACTION_INVALID;
instruction->operands[i].mem.isAddressGenOnly = ZYDIS_TRUE;
ZYDIS_CHECK(
ZydisDecodeOperandMemory(
context, instruction, &instruction->operands[i], ZYDIS_REGISTER_NONE));
instruction->operands[i].mem.type = ZYDIS_MEMOP_TYPE_AGEN;
break;
case ZYDIS_SEMANTIC_OPTYPE_MOFFS:
ZYDIS_ASSERT(instruction->raw.disp.size);
@ -1875,6 +1876,19 @@ static ZydisStatus ZydisDecodeOperands(ZydisDecoderContext* context,
instruction->operands[i].mem.disp.hasDisplacement = ZYDIS_TRUE;
instruction->operands[i].mem.disp.value = instruction->raw.disp.value;
break;
case ZYDIS_SEMANTIC_OPTYPE_MIB:
instruction->operands[i].action = ZYDIS_OPERAND_ACTION_INVALID;
ZYDIS_CHECK(
ZydisDecodeOperandMemory(
context, instruction, &instruction->operands[i], ZYDIS_REGISTER_NONE));
instruction->operands[i].mem.type = ZYDIS_MEMOP_TYPE_MIB;
// Relative addressing is not allowed for this type of memory-operand
if ((instruction->operands[i].mem.base == ZYDIS_REGISTER_EIP) ||
(instruction->operands[i].mem.base == ZYDIS_REGISTER_RIP))
{
return ZYDIS_STATUS_DECODING_ERROR;
}
break;
default:
break;
}
@ -4283,7 +4297,14 @@ static ZydisStatus ZydisDecodeInstruction(ZydisDecoderContext* context,
break;
case ZYDIS_NODETYPE_FILTER_MVEX_E:
status = ZydisNodeHandlerMvexE(instruction, &index);
break;
break;
case ZYDIS_NODETYPE_FILTER_FEATURE_MPX:
case ZYDIS_NODETYPE_FILTER_FEATURE_CET:
case ZYDIS_NODETYPE_FILTER_FEATURE_LZCNT:
case ZYDIS_NODETYPE_FILTER_FEATURE_TZCNT:
// TODO: Make configurable by option
index = 1;
break;
default:
if (nodeType & ZYDIS_NODETYPE_DEFINITION_MASK)
{

View File

@ -333,6 +333,18 @@ const ZydisDecoderTreeNode* ZydisDecoderTreeGetChildNode(const ZydisDecoderTreeN
case ZYDIS_NODETYPE_FILTER_MVEX_E:
ZYDIS_ASSERT(index < 2);
return &filtersMVEXE[parent->value][index];
case ZYDIS_NODETYPE_FILTER_FEATURE_MPX:
ZYDIS_ASSERT(index < 2);
return &filtersFeatureMPX[parent->value][index];
case ZYDIS_NODETYPE_FILTER_FEATURE_CET:
ZYDIS_ASSERT(index < 2);
return &filtersFeatureCET[parent->value][index];
case ZYDIS_NODETYPE_FILTER_FEATURE_LZCNT:
ZYDIS_ASSERT(index < 2);
return &filtersFeatureLZCNT[parent->value][index];
case ZYDIS_NODETYPE_FILTER_FEATURE_TZCNT:
ZYDIS_ASSERT(index < 2);
return &filtersFeatureTZCNT[parent->value][index];
default:
ZYDIS_UNREACHABLE;
}

View File

@ -136,7 +136,23 @@ enum ZydisDecoderTreeNodeTypes
/**
* @brief Reference to an MVEX.E filter.
*/
ZYDIS_NODETYPE_FILTER_MVEX_E = 0x12
ZYDIS_NODETYPE_FILTER_MVEX_E = 0x12,
/**
* @brief Reference to a MPX-feature filter.
*/
ZYDIS_NODETYPE_FILTER_FEATURE_MPX = 0x13,
/**
* @brief Reference to a CET-feature filter.
*/
ZYDIS_NODETYPE_FILTER_FEATURE_CET = 0x14,
/**
* @brief Reference to a LZCNT-feature filter.
*/
ZYDIS_NODETYPE_FILTER_FEATURE_LZCNT = 0x15,
/**
* @brief Reference to a TZCNT-feature filter.
*/
ZYDIS_NODETYPE_FILTER_FEATURE_TZCNT = 0x16
};
/* ---------------------------------------------------------------------------------------------- */

View File

@ -191,7 +191,8 @@ static ZydisStatus ZydisFormatterFormatOperandMemIntel(const ZydisFormatter* for
}
ZYDIS_CHECK(ZydisPrintStr(buffer, bufEnd - *buffer, reg, ZYDIS_LETTER_CASE));
}
if (operand->mem.index != ZYDIS_REGISTER_NONE)
if ((operand->mem.index != ZYDIS_REGISTER_NONE) &&
(operand->mem.type != ZYDIS_MEMOP_TYPE_MIB))
{
const char* reg = ZydisRegisterGetString(operand->mem.index);
if (!reg)
@ -418,11 +419,14 @@ static ZydisStatus ZydisFormatterPrintOperandSizeIntel(const ZydisFormatter* for
uint32_t typecast = 0;
if (formatter->flags & ZYDIS_FMTFLAG_FORCE_OPERANDSIZE)
{
if ((operand->type == ZYDIS_OPERAND_TYPE_MEMORY) && (!operand->mem.isAddressGenOnly))
if ((operand->type == ZYDIS_OPERAND_TYPE_MEMORY) &&
(operand->mem.type == ZYDIS_MEMOP_TYPE_MEM))
{
typecast = instruction->operands[operand->id].size;
}
} else if ((operand->type == ZYDIS_OPERAND_TYPE_MEMORY) && (!operand->mem.isAddressGenOnly))
} else
if ((operand->type == ZYDIS_OPERAND_TYPE_MEMORY) &&
(operand->mem.type == ZYDIS_MEMOP_TYPE_MEM))
{
switch (operand->id)
{

File diff suppressed because one or more lines are too long

View File

@ -108,32 +108,30 @@ const ZydisInstructionDefinitionDEFAULT instructionDefinitionsDEFAULT[] =
{ ZYDIS_MNEMONIC_BLENDVPD, 3, 0xAF5, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_SSE, ZYDIS_ISA_SET_SSE4, ZYDIS_ISA_EXT_SSE4, ZYDIS_EXCEPTION_CLASS_SSE4, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BLENDVPS, 3, 0xAF8, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_SSE, ZYDIS_ISA_SET_SSE4, ZYDIS_ISA_EXT_SSE4, ZYDIS_EXCEPTION_CLASS_SSE4, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BLENDVPS, 3, 0xAFB, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_SSE, ZYDIS_ISA_SET_SSE4, ZYDIS_ISA_EXT_SSE4, ZYDIS_EXCEPTION_CLASS_SSE4, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCL, 2, 0x156C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCL, 2, 0x156E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCL, 2, 0x156C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCL, 2, 0x156E, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCL, 2, 0x1570, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCN, 2, 0x156C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCN, 2, 0x156E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCL, 2, 0x156E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCN, 2, 0x156C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCN, 2, 0x156E, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCN, 2, 0x1570, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCU, 2, 0x156C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCU, 2, 0x156E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCN, 2, 0x156E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCU, 2, 0x156C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDCU, 2, 0x156E, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCU, 2, 0x1570, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDLDX, 2, 0x1572, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDLDX, 2, 0x1572, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDLDX, 2, 0x1572, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDLDX, 2, 0x1574, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDCU, 2, 0x156E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDLDX, 2, 0x1572, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDLDX, 2, 0x1574, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDMK, 2, 0x1576, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMK, 2, 0x1576, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x1578, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x157A, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x157A, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x157A, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x157C, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x157E, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x1580, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x1580, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x1580, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDMOV, 2, 0x1582, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDSTX, 2, 0x1584, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDSTX, 2, 0x1584, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDSTX, 2, 0x1584, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDSTX, 2, 0x1586, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BNDSTX, 2, 0x1584, 0, 0x4, ZYDIS_FALSE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BNDSTX, 2, 0x1586, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_MPX, ZYDIS_ISA_SET_MPX, ZYDIS_ISA_EXT_MPX, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_BOUND, 2, 0x1588, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_INTERRUPT, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_I186, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BOUND, 2, 0x158A, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_INTERRUPT, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_I186, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_BSF, 3, 0xAFE, 0, 0x8, ZYDIS_TRUE, ZYDIS_CATEGORY_BITBYTE, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_I386, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
@ -906,14 +904,10 @@ const ZydisInstructionDefinitionDEFAULT instructionDefinitionsDEFAULT[] =
{ ZYDIS_MNEMONIC_NOP, 1, 0x451, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0x16E0, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0x16E0, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
@ -921,7 +915,6 @@ const ZydisInstructionDefinitionDEFAULT instructionDefinitionsDEFAULT[] =
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB07, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_TRUE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_FAT_NOP, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },
{ ZYDIS_MNEMONIC_NOP, 2, 0xB04, 0, 0x4, ZYDIS_TRUE, ZYDIS_CATEGORY_WIDENOP, ZYDIS_ISA_SET_BASE, ZYDIS_ISA_EXT_PPRO, ZYDIS_EXCEPTION_CLASS_NONE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE, ZYDIS_FALSE },

View File

@ -5485,32 +5485,32 @@ const ZydisOperandDefinition operandDefinitions[] =
{ ZYDIS_SEMANTIC_OPTYPE_MASK, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READWRITE, { 2, 2, 2 }, ZYDIS_IELEMENT_TYPE_INT1, { .encoding = ZYDIS_OPERAND_ENCODING_MASK } },
{ ZYDIS_SEMANTIC_OPTYPE_ZMM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 64, 64, 64 }, ZYDIS_IELEMENT_TYPE_FLOAT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_AGEN, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_GPR64, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_AGEN, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_GPR32, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 24, 24, 24 }, ZYDIS_IELEMENT_TYPE_UINT64, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_MIB, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 24, 24, 24 }, ZYDIS_IELEMENT_TYPE_UINT64, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 12, 12, 12 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_MIB, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 12, 12, 12 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_AGEN, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 8, 8, 8 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 16, 16, 16 }, ZYDIS_IELEMENT_TYPE_UINT64, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 8, 8, 8 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 8, 8, 8 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 16, 16, 16 }, ZYDIS_IELEMENT_TYPE_UINT64, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 24, 24, 24 }, ZYDIS_IELEMENT_TYPE_UINT64, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 8, 8, 8 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 12, 12, 12 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_MIB, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 24, 24, 24 }, ZYDIS_IELEMENT_TYPE_UINT64, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MIB, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_WRITE, { 12, 12, 12 }, ZYDIS_IELEMENT_TYPE_UINT32, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },
{ ZYDIS_SEMANTIC_OPTYPE_BND, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_GPR16_32_64, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 0, 0, 0 }, ZYDIS_IELEMENT_TYPE_INVALID, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_REG } },
{ ZYDIS_SEMANTIC_OPTYPE_MEM, ZYDIS_OPERAND_VISIBILITY_EXPLICIT, ZYDIS_OPERAND_ACTION_READ, { 4, 4, 4 }, ZYDIS_IELEMENT_TYPE_INT16, { .encoding = ZYDIS_OPERAND_ENCODING_MODRM_RM } },

View File

@ -92,7 +92,8 @@ enum ZydisSemanticOperandTypes
ZYDIS_SEMANTIC_OPTYPE_REL,
ZYDIS_SEMANTIC_OPTYPE_PTR,
ZYDIS_SEMANTIC_OPTYPE_AGEN,
ZYDIS_SEMANTIC_OPTYPE_MOFFS
ZYDIS_SEMANTIC_OPTYPE_MOFFS,
ZYDIS_SEMANTIC_OPTYPE_MIB
};
/**

View File

@ -155,6 +155,13 @@ void printOperands(ZydisDecodedInstruction* instruction)
"JIMM32_32_64",
"JIMM16_32_32"
};
static const char* memopTypes[] =
{
"INVALID",
"MEM",
"AGEN",
"MIB"
};
printf("%2d %9s %10s %6s %12s %5d %4d %6d %8s",
i,
operandTypes[instruction->operands[i].type],
@ -171,7 +178,9 @@ void printOperands(ZydisDecodedInstruction* instruction)
printf(" %27s", ZydisRegisterGetString(instruction->operands[i].reg.value));
break;
case ZYDIS_OPERAND_TYPE_MEMORY:
printf(" SEG =%20s\n", ZydisRegisterGetString(instruction->operands[i].mem.segment));
printf(" TYPE =%20s\n", memopTypes[instruction->operands[i].mem.type]);
printf(" %84s =%20s\n",
"SEG ", ZydisRegisterGetString(instruction->operands[i].mem.segment));
printf(" %84s =%20s\n",
"BASE ", ZydisRegisterGetString(instruction->operands[i].mem.base));
printf(" %84s =%20s\n",