Skip to content

Commit

Permalink
Fix jmpabs prefix flags
Browse files Browse the repository at this point in the history
  • Loading branch information
flobernd committed Nov 4, 2024
1 parent 10cf4b3 commit 49a1ef4
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
2 changes: 2 additions & 0 deletions include/Zydis/Internal/FormatterBase.h
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,8 @@ ZYAN_INLINE ZyanStatus ZydisFormatterBufferAppendPredefined(ZydisFormatterBuffer
ZYAN_ASSERT(buffer);
ZYAN_ASSERT(data);

// TODO: Merge with last token, if `last->type == predefined->first_token.type`

const ZyanUSize len = buffer->string.vector.size;
ZYAN_ASSERT((len > 0) && (len < 256));
if (buffer->capacity <= len + data->size)
Expand Down
7 changes: 6 additions & 1 deletion src/FormatterBuffer.c
Original file line number Diff line number Diff line change
Expand Up @@ -120,14 +120,19 @@ ZyanStatus ZydisFormatterBufferAppend(ZydisFormatterBuffer* buffer, ZydisTokenTy
return ZYAN_STATUS_SUCCESS;
}

ZydisFormatterToken* const last = (ZydisFormatterToken*)buffer->string.vector.data - 1;
if (last->type == type)
{
return ZYAN_STATUS_SUCCESS;
}

const ZyanUSize len = buffer->string.vector.size;
ZYAN_ASSERT((len > 0) && (len < 256));
if (buffer->capacity <= len + sizeof(ZydisFormatterToken))
{
return ZYAN_STATUS_INSUFFICIENT_BUFFER_SIZE;
}

ZydisFormatterToken* const last = (ZydisFormatterToken*)buffer->string.vector.data - 1;
last->next = (ZyanU8)len;

const ZyanUSize delta = len + sizeof(ZydisFormatterToken);
Expand Down
2 changes: 1 addition & 1 deletion src/Generated/InstructionDefinitions.inc
Original file line number Diff line number Diff line change
Expand Up @@ -650,7 +650,7 @@ const ZydisInstructionDefinitionLEGACY ISTR_DEFINITIONS_LEGACY[] =
{ ZYDIS_MNEMONIC_JMP ZYDIS_NOTMIN(2) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0x1CFA), 5, 0 ZYDIS_NOTMIN(0x0), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_UNCOND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_I86) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_BASE) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_NEAR) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_NONE), 0, ZYDIS_REGKIND_GPR ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) },
{ ZYDIS_MNEMONIC_JMP ZYDIS_NOTMIN(2) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0x1CFC), 5, 0 ZYDIS_NOTMIN(0x0), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_UNCOND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_I86) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_BASE) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_NEAR) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_NONE), 0, ZYDIS_MEMOP_TYPE_MEM ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) },
{ ZYDIS_MNEMONIC_JMP ZYDIS_NOTMIN(2) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0x567), 0, 0 ZYDIS_NOTMIN(0x0), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_UNCOND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_I86) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_BASE) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_FAR) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_NONE), 0, ZYDIS_MEMOP_TYPE_MEM ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) },
{ ZYDIS_MNEMONIC_JMPABS ZYDIS_NOTMIN(2) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0x1CFE), 0, 0 ZYDIS_NOTMIN(0x0), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_UNCOND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_APX_F) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_APXLEGACY) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_NONE) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_APX_LEGACY_JMPABS), 0, 0 ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) },
{ ZYDIS_MNEMONIC_JMPABS ZYDIS_NOTMIN(2) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0x1CFE), 0, 0 ZYDIS_NOTMIN(0x0), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_UNCOND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_APX_F) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_APXLEGACY) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_NONE) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_APX_LEGACY_JMPABS), 0, 0 ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) },
{ ZYDIS_MNEMONIC_JNB ZYDIS_NOTMIN(3) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0xFC9), 5, 0 ZYDIS_NOTMIN(0x1C), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_COND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_I86) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_BASE) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_SHORT) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_NONE), 0, 0 ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) },
{ ZYDIS_MNEMONIC_JNB ZYDIS_NOTMIN(3) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0xFCC), 0, 0 ZYDIS_NOTMIN(0x1C), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_COND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_I86) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_BASE) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_SHORT) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_NONE), 0, 0 ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) },
{ ZYDIS_MNEMONIC_JNB ZYDIS_NOTMIN(3) ZYDIS_NOTMIN(1) ZYDIS_NOTMIN(0xFCF), 5, 0 ZYDIS_NOTMIN(0x1C), ZYAN_FALSE, ZYAN_FALSE ZYDIS_NOTMIN(ZYDIS_CATEGORY_COND_BR) ZYDIS_NOTMIN(ZYDIS_ISA_SET_I86) ZYDIS_NOTMIN(ZYDIS_ISA_EXT_BASE) ZYDIS_NOTMIN(ZYDIS_BRANCH_TYPE_NEAR) ZYDIS_NOTMIN(ZYDIS_EXCEPTION_CLASS_NONE), 0, 0 ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYDIS_RW_ACTION_NONE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE), ZYAN_FALSE ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_FALSE) ZYDIS_NOTMIN(ZYAN_TRUE) },
Expand Down

0 comments on commit 49a1ef4

Please sign in to comment.