mirror of https://github.com/x64dbg/zydis
Refactorings
This commit is contained in:
parent
f73539ede1
commit
34a0572948
|
@ -885,7 +885,7 @@ typedef struct ZydisDecodedInstruction_
|
||||||
/**
|
/**
|
||||||
* @brief The instruction-mnemonic.
|
* @brief The instruction-mnemonic.
|
||||||
*/
|
*/
|
||||||
ZydisInstructionMnemonic mnemonic;
|
ZydisMnemonic mnemonic;
|
||||||
/**
|
/**
|
||||||
* @brief The length of the decoded instruction.
|
* @brief The length of the decoded instruction.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,9 +39,9 @@ extern "C" {
|
||||||
/* ============================================================================================== */
|
/* ============================================================================================== */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Defines the @c ZydisInstructionMnemonic datatype.
|
* @brief Defines the @c ZydisMnemonic datatype.
|
||||||
*/
|
*/
|
||||||
typedef uint16_t ZydisInstructionMnemonic;
|
typedef uint16_t ZydisMnemonic;
|
||||||
|
|
||||||
#include <Zydis/Generated/MnemonicDefines.h>
|
#include <Zydis/Generated/MnemonicDefines.h>
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ typedef uint16_t ZydisInstructionMnemonic;
|
||||||
*
|
*
|
||||||
* @return The instruction mnemonic string or @c NULL, if an invalid mnemonic was passed.
|
* @return The instruction mnemonic string or @c NULL, if an invalid mnemonic was passed.
|
||||||
*/
|
*/
|
||||||
ZYDIS_EXPORT const char* ZydisMnemonicGetString(ZydisInstructionMnemonic mnemonic);
|
ZYDIS_EXPORT const char* ZydisMnemonicGetString(ZydisMnemonic mnemonic);
|
||||||
|
|
||||||
/* ============================================================================================== */
|
/* ============================================================================================== */
|
||||||
|
|
||||||
|
|
|
@ -3143,13 +3143,13 @@ static ZydisStatus ZydisCollectOptionalPrefixes(ZydisDecoderContext* context,
|
||||||
* @return A zydis status code.
|
* @return A zydis status code.
|
||||||
*/
|
*/
|
||||||
static ZydisStatus ZydisDecodeInstructionPhysical(ZydisDecoderContext* context,
|
static ZydisStatus ZydisDecodeInstructionPhysical(ZydisDecoderContext* context,
|
||||||
ZydisDecodedInstruction* instruction, const ZydisInstructionParts* optionalParts)
|
ZydisDecodedInstruction* instruction, const ZydisPhysicalInstructionInfo* info)
|
||||||
{
|
{
|
||||||
ZYDIS_ASSERT(context);
|
ZYDIS_ASSERT(context);
|
||||||
ZYDIS_ASSERT(instruction);
|
ZYDIS_ASSERT(instruction);
|
||||||
ZYDIS_ASSERT(optionalParts);
|
ZYDIS_ASSERT(info);
|
||||||
|
|
||||||
if (optionalParts->flags & ZYDIS_INSTRPART_FLAG_HAS_MODRM)
|
if (info->flags & ZYDIS_PHYSINSTR_FLAG_HAS_MODRM)
|
||||||
{
|
{
|
||||||
if (!instruction->raw.modrm.isDecoded)
|
if (!instruction->raw.modrm.isDecoded)
|
||||||
{
|
{
|
||||||
|
@ -3159,7 +3159,7 @@ static ZydisStatus ZydisDecodeInstructionPhysical(ZydisDecoderContext* context,
|
||||||
}
|
}
|
||||||
uint8_t hasSIB = 0;
|
uint8_t hasSIB = 0;
|
||||||
uint8_t displacementSize = 0;
|
uint8_t displacementSize = 0;
|
||||||
if (!(optionalParts->flags & ZYDIS_INSTRPART_FLAG_FORCE_REG_FORM))
|
if (!(info->flags & ZYDIS_PHYSINSTR_FLAG_FORCE_REG_FORM))
|
||||||
{
|
{
|
||||||
switch (instruction->addressWidth)
|
switch (instruction->addressWidth)
|
||||||
{
|
{
|
||||||
|
@ -3231,29 +3231,27 @@ static ZydisStatus ZydisDecodeInstructionPhysical(ZydisDecoderContext* context,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optionalParts->flags & ZYDIS_INSTRPART_FLAG_HAS_DISP)
|
if (info->flags & ZYDIS_PHYSINSTR_FLAG_HAS_DISP)
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(ZydisReadDisplacement(
|
ZYDIS_CHECK(ZydisReadDisplacement(
|
||||||
context, instruction, optionalParts->disp.size[context->easzIndex]));
|
context, instruction, info->disp.size[context->easzIndex]));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optionalParts->flags & ZYDIS_INSTRPART_FLAG_HAS_IMM0)
|
if (info->flags & ZYDIS_PHYSINSTR_FLAG_HAS_IMM0)
|
||||||
{
|
{
|
||||||
if (optionalParts->imm[0].isRelative)
|
if (info->imm[0].isRelative)
|
||||||
{
|
{
|
||||||
instruction->attributes |= ZYDIS_ATTRIB_IS_RELATIVE;
|
instruction->attributes |= ZYDIS_ATTRIB_IS_RELATIVE;
|
||||||
}
|
}
|
||||||
ZYDIS_CHECK(ZydisReadImmediate(context, instruction, 0,
|
ZYDIS_CHECK(ZydisReadImmediate(context, instruction, 0,
|
||||||
optionalParts->imm[0].size[context->eoszIndex],
|
info->imm[0].size[context->eoszIndex], info->imm[0].isSigned, info->imm[0].isRelative));
|
||||||
optionalParts->imm[0].isSigned, optionalParts->imm[0].isRelative));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (optionalParts->flags & ZYDIS_INSTRPART_FLAG_HAS_IMM1)
|
if (info->flags & ZYDIS_PHYSINSTR_FLAG_HAS_IMM1)
|
||||||
{
|
{
|
||||||
ZYDIS_ASSERT(!(optionalParts->flags & ZYDIS_INSTRPART_FLAG_HAS_DISP));
|
ZYDIS_ASSERT(!(info->flags & ZYDIS_PHYSINSTR_FLAG_HAS_DISP));
|
||||||
ZYDIS_CHECK(ZydisReadImmediate(context, instruction, 1,
|
ZYDIS_CHECK(ZydisReadImmediate(context, instruction, 1,
|
||||||
optionalParts->imm[1].size[context->eoszIndex],
|
info->imm[1].size[context->eoszIndex], info->imm[1].isSigned, info->imm[1].isRelative));
|
||||||
optionalParts->imm[1].isSigned, optionalParts->imm[1].isRelative));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return ZYDIS_STATUS_SUCCESS;
|
return ZYDIS_STATUS_SUCCESS;
|
||||||
|
@ -4266,9 +4264,9 @@ static ZydisStatus ZydisDecodeInstruction(ZydisDecoderContext* context,
|
||||||
ZydisSetEffectiveOperandSize(context, instruction, definition);
|
ZydisSetEffectiveOperandSize(context, instruction, definition);
|
||||||
ZydisSetEffectiveAddressWidth(context, instruction);
|
ZydisSetEffectiveAddressWidth(context, instruction);
|
||||||
|
|
||||||
const ZydisInstructionParts* optionalParts;
|
const ZydisPhysicalInstructionInfo* info;
|
||||||
ZydisGetOptionalInstructionParts(node, &optionalParts);
|
ZydisGetPhysicalInstructionInfo(node, &info);
|
||||||
ZYDIS_CHECK(ZydisDecodeInstructionPhysical(context, instruction, optionalParts));
|
ZYDIS_CHECK(ZydisDecodeInstructionPhysical(context, instruction, info));
|
||||||
|
|
||||||
if (instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_3DNOW)
|
if (instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_3DNOW)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
static const ZydisInstructionParts instructionClassMap[] =
|
static const ZydisPhysicalInstructionInfo physicalEncodings[] =
|
||||||
{
|
{
|
||||||
/*00*/ { 0, { { 0, 0, 0 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*00*/ { 0, { { 0, 0, 0 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*01*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*01*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*02*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_MODRM, { { 0, 0, 0 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*02*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_MODRM, { { 0, 0, 0 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*03*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*03*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*04*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_MODRM | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*04*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_MODRM | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*05*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_MODRM | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*05*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_MODRM | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*06*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_MODRM | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*06*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_MODRM | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*07*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*07*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*08*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 32, 32, 32 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*08*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 32, 32, 32 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*09*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0 | ZYDIS_INSTRPART_FLAG_HAS_IMM1, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 16, 16, 16 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*09*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM1, { { 0, 0, 0 } }, { { { 16, 32, 32 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 16, 16, 16 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*0A*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0 | ZYDIS_INSTRPART_FLAG_HAS_IMM1, { { 0, 0, 0 } }, { { { 16, 16, 16 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 8, 8, 8 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*0A*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM1, { { 0, 0, 0 } }, { { { 16, 16, 16 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 8, 8, 8 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*0B*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*0B*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*0C*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*0C*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 8, 8, 8 }, ZYDIS_TRUE, ZYDIS_TRUE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*0D*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_DISP, { { 16, 32, 64 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*0D*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_DISP, { { 16, 32, 64 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*0E*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 64 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*0E*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 32, 64 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*0F*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_MODRM | ZYDIS_INSTRPART_FLAG_FORCE_REG_FORM, { { 0, 0, 0 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*0F*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_MODRM | ZYDIS_PHYSINSTR_FLAG_FORCE_REG_FORM, { { 0, 0, 0 } }, { { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*10*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 16, 16 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
/*10*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 16, 16, 16 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } },
|
||||||
/*11*/ { 0 | ZYDIS_INSTRPART_FLAG_HAS_MODRM | ZYDIS_INSTRPART_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 32, 32, 32 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } }
|
/*11*/ { 0 | ZYDIS_PHYSINSTR_FLAG_HAS_MODRM | ZYDIS_PHYSINSTR_FLAG_HAS_IMM0, { { 0, 0, 0 } }, { { { 32, 32, 32 }, ZYDIS_FALSE, ZYDIS_FALSE }, { { 0, 0, 0 }, ZYDIS_FALSE, ZYDIS_FALSE } } }
|
||||||
};
|
};
|
|
@ -286,7 +286,7 @@ extern const ZydisInstructionDefinitionMVEX instructionDefinitionsMVEX[];
|
||||||
/* Physical instruction encodings */
|
/* Physical instruction encodings */
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#include <Generated/InstructionClassMap.inc>
|
#include <Generated/PhysicalEncodings.inc>
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
/* Instruction tree */
|
/* Instruction tree */
|
||||||
|
@ -446,13 +446,13 @@ void ZydisGetInstructionDefinition(const ZydisInstructionTreeNode* node,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ZydisGetOptionalInstructionParts(const ZydisInstructionTreeNode* node,
|
void ZydisGetPhysicalInstructionInfo(const ZydisInstructionTreeNode* node,
|
||||||
const ZydisInstructionParts** info)
|
const ZydisPhysicalInstructionInfo** info)
|
||||||
{
|
{
|
||||||
ZYDIS_ASSERT(node->type & ZYDIS_NODETYPE_DEFINITION_MASK);
|
ZYDIS_ASSERT(node->type & ZYDIS_NODETYPE_DEFINITION_MASK);
|
||||||
uint8_t class = (node->type) & 0x7F;
|
uint8_t class = (node->type) & 0x7F;
|
||||||
ZYDIS_ASSERT(class < ZYDIS_ARRAY_SIZE(instructionClassMap));
|
ZYDIS_ASSERT(class < ZYDIS_ARRAY_SIZE(physicalEncodings));
|
||||||
*info = &instructionClassMap[class];
|
*info = &physicalEncodings[class];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
|
|
|
@ -652,7 +652,7 @@ enum ZydisMaskPolicies
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
#define ZYDIS_INSTRUCTION_DEFINITION_BASE \
|
#define ZYDIS_INSTRUCTION_DEFINITION_BASE \
|
||||||
ZydisInstructionMnemonic mnemonic ZYDIS_BITFIELD(11); \
|
ZydisMnemonic mnemonic ZYDIS_BITFIELD(11); \
|
||||||
uint8_t operandCount ZYDIS_BITFIELD( 4); \
|
uint8_t operandCount ZYDIS_BITFIELD( 4); \
|
||||||
uint16_t operandReference ZYDIS_BITFIELD(15); \
|
uint16_t operandReference ZYDIS_BITFIELD(15); \
|
||||||
uint8_t operandSizeMap ZYDIS_BITFIELD( 3)
|
uint8_t operandSizeMap ZYDIS_BITFIELD( 3)
|
||||||
|
@ -737,29 +737,29 @@ typedef struct ZydisInstructionDefinitionMVEX_
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Defines the @c ZydisInstructionPartFlags datatype.
|
* @brief Defines the @c ZydisPhysicalInstructionInfoFlags datatype.
|
||||||
*/
|
*/
|
||||||
typedef uint8_t ZydisInstructionPartFlags;
|
typedef uint8_t ZydisPhysicalInstructionInfoFlags;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The instruction has an optional modrm byte.
|
* @brief The instruction has an optional modrm byte.
|
||||||
*/
|
*/
|
||||||
#define ZYDIS_INSTRPART_FLAG_HAS_MODRM 0x01
|
#define ZYDIS_PHYSINSTR_FLAG_HAS_MODRM 0x01
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The instruction has an optional displacement value.
|
* @brief The instruction has an optional displacement value.
|
||||||
*/
|
*/
|
||||||
#define ZYDIS_INSTRPART_FLAG_HAS_DISP 0x02
|
#define ZYDIS_PHYSINSTR_FLAG_HAS_DISP 0x02
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The instruction has an optional immediate value.
|
* @brief The instruction has an optional immediate value.
|
||||||
*/
|
*/
|
||||||
#define ZYDIS_INSTRPART_FLAG_HAS_IMM0 0x04
|
#define ZYDIS_PHYSINSTR_FLAG_HAS_IMM0 0x04
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The instruction has a second optional immediate value.
|
* @brief The instruction has a second optional immediate value.
|
||||||
*/
|
*/
|
||||||
#define ZYDIS_INSTRPART_FLAG_HAS_IMM1 0x08
|
#define ZYDIS_PHYSINSTR_FLAG_HAS_IMM1 0x08
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief The instruction ignores the value of `modrm.mod` and always assumes `modrm.mod == 3`
|
* @brief The instruction ignores the value of `modrm.mod` and always assumes `modrm.mod == 3`
|
||||||
|
@ -767,14 +767,17 @@ typedef uint8_t ZydisInstructionPartFlags;
|
||||||
*
|
*
|
||||||
* Instructions with this flag can't have a SIB byte or a displacement value.
|
* Instructions with this flag can't have a SIB byte or a displacement value.
|
||||||
*/
|
*/
|
||||||
#define ZYDIS_INSTRPART_FLAG_FORCE_REG_FORM 0x10
|
#define ZYDIS_PHYSINSTR_FLAG_FORCE_REG_FORM 0x10
|
||||||
|
|
||||||
typedef struct ZydisInstructionParts_
|
/**
|
||||||
|
* @brief Defines the @c ZydisPhysicalInstructionInfo struct.
|
||||||
|
*/
|
||||||
|
typedef struct ZydisPhysicalInstructionInfo_
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @brief Contains flags with information about the physical instruction-encoding.
|
* @brief Contains flags with information about the physical instruction-encoding.
|
||||||
*/
|
*/
|
||||||
ZydisInstructionPartFlags flags;
|
ZydisPhysicalInstructionInfoFlags flags;
|
||||||
/**
|
/**
|
||||||
* @brief Displacement info.
|
* @brief Displacement info.
|
||||||
*/
|
*/
|
||||||
|
@ -803,7 +806,7 @@ typedef struct ZydisInstructionParts_
|
||||||
*/
|
*/
|
||||||
ZydisBool isRelative;
|
ZydisBool isRelative;
|
||||||
} imm[2];
|
} imm[2];
|
||||||
} ZydisInstructionParts;
|
} ZydisPhysicalInstructionInfo;
|
||||||
|
|
||||||
/* ============================================================================================== */
|
/* ============================================================================================== */
|
||||||
/* Functions */
|
/* Functions */
|
||||||
|
@ -851,8 +854,8 @@ ZYDIS_NO_EXPORT void ZydisGetInstructionDefinition(const ZydisInstructionTreeNod
|
||||||
* @param node The instruction definition node.
|
* @param node The instruction definition node.
|
||||||
* @param info A pointer to the @c ZydisInstructionParts struct.
|
* @param info A pointer to the @c ZydisInstructionParts struct.
|
||||||
*/
|
*/
|
||||||
ZYDIS_NO_EXPORT void ZydisGetOptionalInstructionParts(const ZydisInstructionTreeNode* node,
|
ZYDIS_NO_EXPORT void ZydisGetPhysicalInstructionInfo(const ZydisInstructionTreeNode* node,
|
||||||
const ZydisInstructionParts** info);
|
const ZydisPhysicalInstructionInfo** info);
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------------------------------- */
|
||||||
/* Operand definition */
|
/* Operand definition */
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
/* Exported functions */
|
/* Exported functions */
|
||||||
/* ============================================================================================== */
|
/* ============================================================================================== */
|
||||||
|
|
||||||
const char* ZydisMnemonicGetString(ZydisInstructionMnemonic mnemonic)
|
const char* ZydisMnemonicGetString(ZydisMnemonic mnemonic)
|
||||||
{
|
{
|
||||||
if (mnemonic > ZYDIS_ARRAY_SIZE(mnemonicStrings) - 1)
|
if (mnemonic > ZYDIS_ARRAY_SIZE(mnemonicStrings) - 1)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue