diff --git a/include/Zydis/FormatterBuffer.h b/include/Zydis/FormatterBuffer.h index 3a397e5e..a6c878bf 100644 --- a/include/Zydis/FormatterBuffer.h +++ b/include/Zydis/FormatterBuffer.h @@ -167,7 +167,7 @@ typedef const ZydisFormatterToken ZydisFormatterTokenConst; typedef struct ZydisFormatterBuffer_ { /** - * `ZYAN_TRUE`, if the buffer contains a token stream or `ZYAN_FALSE, if it + * `ZYAN_TRUE`, if the buffer contains a token stream or `ZYAN_FALSE`, if it * contains a simple string. */ ZyanBool is_token_list; diff --git a/src/Decoder.c b/src/Decoder.c index 494413a9..699a052a 100644 --- a/src/Decoder.c +++ b/src/Decoder.c @@ -4315,7 +4315,9 @@ static ZyanStatus ZydisNodeHandlerRexB(const ZydisDecoderContext* context, default: ZYAN_UNREACHABLE; } - *index = context->vector_unified.B3; + + *index = context->vector_unified.B3 + context->vector_unified.B4 ? 1 : 0; + return ZYAN_STATUS_SUCCESS; } diff --git a/src/FormatterATT.c b/src/FormatterATT.c index 4735f3fc..e0a1dcee 100644 --- a/src/FormatterATT.c +++ b/src/FormatterATT.c @@ -65,9 +65,10 @@ ZyanStatus ZydisFormatterATTFormatInstruction(const ZydisFormatter* formatter, ZyanUPointer state_mnemonic; ZYDIS_BUFFER_REMEMBER(buffer, state_mnemonic); - if (formatter->deco_apx_dfv_use_immediate) + if (formatter->deco_apx_dfv_use_immediate && (context->instruction->apx.scc != ZYDIS_SCC_NONE)) { ZYDIS_BUFFER_APPEND(buffer, DELIM_MNEMONIC); + ZYDIS_BUFFER_APPEND_TOKEN(buffer, ZYDIS_TOKEN_IMMEDIATE); ZYDIS_BUFFER_APPEND(buffer, IMMEDIATE); ZYAN_CHECK(ZydisStringAppendDecU(&buffer->string, context->instruction->apx.default_flags, 0, diff --git a/src/FormatterIntel.c b/src/FormatterIntel.c index a470ea00..95c0e94f 100644 --- a/src/FormatterIntel.c +++ b/src/FormatterIntel.c @@ -69,7 +69,7 @@ ZyanStatus ZydisFormatterIntelFormatInstruction(const ZydisFormatter* formatter, ZyanUPointer state_mnemonic; ZYDIS_BUFFER_REMEMBER(buffer, state_mnemonic); - if (formatter->deco_apx_dfv_use_immediate) + if (formatter->deco_apx_dfv_use_immediate && (context->instruction->apx.scc != ZYDIS_SCC_NONE)) { ZYDIS_BUFFER_APPEND(buffer, DELIM_MNEMONIC); ZYDIS_BUFFER_APPEND_TOKEN(buffer, ZYDIS_TOKEN_IMMEDIATE);