mirror of https://github.com/x64dbg/zydis
Minor improvements to the instruction-formatter
This commit is contained in:
parent
2be83199d5
commit
54d3836256
|
@ -402,7 +402,6 @@ typedef ZydisStatus (*ZydisFormatterFormatAddressFunc)(const ZydisFormatter* for
|
||||||
* @param instruction A pointer to the @c ZydisDecodedInstruction struct.
|
* @param instruction A pointer to the @c ZydisDecodedInstruction struct.
|
||||||
* @param operand A pointer to the @c ZydisDecodedOperand struct.
|
* @param operand A pointer to the @c ZydisDecodedOperand struct.
|
||||||
* @param type The decorator type.
|
* @param type The decorator type.
|
||||||
* @param mask The embedded-mask register (`ZYDIS_DECORATOR_TYPE_MASK` only).
|
|
||||||
*
|
*
|
||||||
* @return Returning a status code other than @c ZYDIS_STATUS_SUCCESS will immediately cause the
|
* @return Returning a status code other than @c ZYDIS_STATUS_SUCCESS will immediately cause the
|
||||||
* formatting process to fail.
|
* formatting process to fail.
|
||||||
|
@ -417,7 +416,7 @@ typedef ZydisStatus (*ZydisFormatterFormatAddressFunc)(const ZydisFormatter* for
|
||||||
*/
|
*/
|
||||||
typedef ZydisStatus (*ZydisFormatterFormatDecoratorFunc)(const ZydisFormatter* formatter,
|
typedef ZydisStatus (*ZydisFormatterFormatDecoratorFunc)(const ZydisFormatter* formatter,
|
||||||
char** buffer, size_t bufferLen, ZydisDecodedInstruction* instruction,
|
char** buffer, size_t bufferLen, ZydisDecodedInstruction* instruction,
|
||||||
ZydisDecodedOperand* operand, ZydisDecoratorType type, ZydisRegister mask);
|
ZydisDecodedOperand* operand, ZydisDecoratorType type);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Defines the @c ZydisFormatter struct.
|
* @brief Defines the @c ZydisFormatter struct.
|
||||||
|
|
|
@ -637,7 +637,7 @@ static ZydisStatus ZydisFormatterPrintSegmentIntel(const ZydisFormatter* formatt
|
||||||
|
|
||||||
static ZydisStatus ZydisFormatterPrintDecoratorIntel(const ZydisFormatter* formatter,
|
static ZydisStatus ZydisFormatterPrintDecoratorIntel(const ZydisFormatter* formatter,
|
||||||
char** buffer, size_t bufferLen, ZydisDecodedInstruction* instruction,
|
char** buffer, size_t bufferLen, ZydisDecodedInstruction* instruction,
|
||||||
ZydisDecodedOperand* operand, ZydisDecoratorType type, ZydisRegister mask)
|
ZydisDecodedOperand* operand, ZydisDecoratorType type)
|
||||||
{
|
{
|
||||||
if (!formatter || !buffer || !*buffer || (bufferLen <= 0) || !instruction || !operand)
|
if (!formatter || !buffer || !*buffer || (bufferLen <= 0) || !instruction || !operand)
|
||||||
{
|
{
|
||||||
|
@ -649,9 +649,9 @@ static ZydisStatus ZydisFormatterPrintDecoratorIntel(const ZydisFormatter* forma
|
||||||
{
|
{
|
||||||
case ZYDIS_DECORATOR_TYPE_MASK:
|
case ZYDIS_DECORATOR_TYPE_MASK:
|
||||||
{
|
{
|
||||||
if (mask != ZYDIS_REGISTER_K0)
|
if (instruction->avx.mask.reg != ZYDIS_REGISTER_K0)
|
||||||
{
|
{
|
||||||
const char* reg = ZydisRegisterGetString(mask);
|
const char* reg = ZydisRegisterGetString(instruction->avx.mask.reg);
|
||||||
if (!reg)
|
if (!reg)
|
||||||
{
|
{
|
||||||
return ZYDIS_STATUS_INVALID_PARAMETER;
|
return ZYDIS_STATUS_INVALID_PARAMETER;
|
||||||
|
@ -921,21 +921,21 @@ static ZydisStatus ZydisFormatterFormatInstrIntel(const ZydisFormatter* formatte
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_MASK, instruction->operands[i + 1].reg));
|
ZYDIS_DECORATOR_TYPE_MASK));
|
||||||
}
|
}
|
||||||
if (instruction->operands[i].type == ZYDIS_OPERAND_TYPE_MEMORY)
|
if (instruction->operands[i].type == ZYDIS_OPERAND_TYPE_MEMORY)
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_BROADCAST, ZYDIS_REGISTER_NONE));
|
ZYDIS_DECORATOR_TYPE_BROADCAST));
|
||||||
if (instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_MVEX)
|
if (instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_MVEX)
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_CONVERSION, ZYDIS_REGISTER_NONE));
|
ZYDIS_DECORATOR_TYPE_CONVERSION));
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_EVICTION_HINT, ZYDIS_REGISTER_NONE));
|
ZYDIS_DECORATOR_TYPE_EVICTION_HINT));
|
||||||
}
|
}
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
|
@ -946,18 +946,18 @@ static ZydisStatus ZydisFormatterFormatInstrIntel(const ZydisFormatter* formatte
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_SWIZZLE, ZYDIS_REGISTER_NONE));
|
ZYDIS_DECORATOR_TYPE_SWIZZLE));
|
||||||
}
|
}
|
||||||
if (instruction->avx.roundingMode)
|
if (instruction->avx.roundingMode)
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_ROUNDING_CONTROL, ZYDIS_REGISTER_NONE));
|
ZYDIS_DECORATOR_TYPE_ROUNDING_CONTROL));
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
ZYDIS_CHECK(formatter->funcPrintDecorator(formatter, buffer,
|
||||||
bufEnd - *buffer, instruction, &instruction->operands[i],
|
bufEnd - *buffer, instruction, &instruction->operands[i],
|
||||||
ZYDIS_DECORATOR_TYPE_SAE, ZYDIS_REGISTER_NONE));
|
ZYDIS_DECORATOR_TYPE_SAE));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue