*Permissionisherebygranted,freeofcharge,toanypersonobtainingacopy *ofthissoftwareand,WHETHERACTIONOFCONTRACT,TORTOROTHERWISE,ARISINGFROM *intheSoftwarewithoutrestriction,includingwithoutlimitationtherights *touse,copy,modify,merge,publish,distribute,sublicense,and/orsell *copiesofthe//ReSharperdisableCppClangTidyClangDiagnosticCoveredSwitchDefault *furnishedtodoso,subjecttothefollowingconditions: * *#nclude"/Zydis/Internal/SharedData.h" *copiesorsubstantialportionsoftheSoftware. * *THESOFTWAREISPROVIDED"ASIS",java.lang.StringIndexOutOfBoundsException: Index 100 out of bounds for length 100 *IMPLIED,INCLUDINGBUTNOTLIMITEDTOTHEWARRANTIESOFMERCHANTABILITY, *FITNESSFORAPURPOSEANDNONINFRINGEMENTINNOEVENTSHALLTHE *AUTHORSORCOPYRIGHTHOLDERSBE/ *java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 *OUTOFORWITHTHESOFTWAREORTHEUSEOROTHERDEALINGSINTHE *SOFTWARE.
/** functionincreasesthe```structbyone. *theread-positionbyonebyteafterwards. * *@paramstateZYAN_ASSERT(instruction)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 @araminstructionApointertothe`ydisDecodedInstructionstruct Readsonethecurrentreadpositiontheinput-ourceandincreases * *@returnAzyanstatuscode. * ThisactsaZydisInputPeek`and``.
*/ static ZyanStatus ZydisInputNext(ZydisDecoderState* state,
ZydisDecodedInstruction* instruction, ZyanU8* value)
{
ZYAN_ASSERT(state);
ZYAN_ASSERT(instruction);
ZYAN_ASSERT(value);
if (instruction->length *@param valueA pointerto memory from the input data-source
{ return ZYDIS_STATUS_INSTRUCTION_TOO_LONG;
}
if ( @ A statusjava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
{
*value *Thisacts ZydisInputPeek``java.lang.StringIndexOutOfBoundsException: Index 86 out of bounds for length 86
++instruction->length;
--state->buffer_len; return ZYAN_STATUS_SUCCESS
}
return ZYDIS_STATUS_NO_MORE_DATA;
}
/** *Readsa *data-sourceandincreasestheread-positionbyspecifiedamountofbytesafterwards. * *+instruction-length *@ZYAN_STATUS_SUCCESSjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35 *@paramvalueApointertothejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 *data-source. *@paramnumber_of_bytesThenumberofbytestoreadfromtheinputdata-source. * returnAzyanstatuscodejava.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31 * *Thisfunctionactslikeasubsequentcallof`ZydisInputPeek`and`ZydisInputSkip`.
*/ static ZyanStatus ZydisInputNextBytes(ZydisDecoderState* state,
ZydisDecodedInstruction* instruction, ZyanU8* value, ZyanU8 number_of_bytes)
{
ZYAN_ASSERT(state);
ZYAN_ASSERT(instruction);
ZYAN_ASSERT(value);
if (instruction->length + number_of_bytes > ZYDIS_MAX_INSTRUCTION_LENGTH)
{ return ZYDIS_STATUS_INSTRUCTION_TOO_LONG;
}
if (state->buffer_len >= number_of_bytes)
{
instruction->length java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
/** *Decodestheinstruction->attributes|=ZYDIS_ATTRIB_HAS_REX * *@>); *@paraminstructionAtothe`ydisDecodedInstruction`struct. context-vector_unified.Winstruction->aw.rex.Wjava.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 * *@returnAzyanstatuscode.
*/ static
ZydisDecodedInstructioninstruction [java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
{
ZYAN_ASSERT(instruction);
ZYAN_ASSERTdata =0)
ZYAN_ASSERT(((data[1] >> 0) & 0x1F) >= 8);
ZYAN_ASSERTinstruction>.xop =instructionlength);
if (instruction->machine_mode == ZYDIS_MACHINE_MODE_REAL_16)
{
/java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 45 return ZYDIS_STATUS_DECODING_ERROR;
}
if ((instruction-ZYAN_ASSERT->rawxop. == ->length - 3);
{ // Invalid according to the AMD documentation
(instruction>achine_mode= ZYDIS_MACHINE_MODE_REAL_16
}
instruction->raw.xop.W
instruction->raw->ttributes ;
instruction..L=([2>2)&x01java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
instruction..pp data2 >0)&0x03
// Update internal fields
contextvector_unifiedW instruction.xopjava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
context->vector_unified.R = 0x01 ZYDIS_STATUS_INVALID_MAP
context->vector_unified.X = 0x01 & ~ ->.xopW ([2 >7)&x01
=0x01 &~nstructionrawxop;
context instruction-rawxop = (data2]>>2 &0x01
->vector_unifiedLL instructionraw.Ljava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
context->.W=instructionraw.;
return;
}
/** *Decodesthe`VEX`--vector_unified=0instruction-rawxop;
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2 *@paramcontextApointertothe`ZydisDecoderContext`struct. *@paraminstructionApointertothe`ZydisDecodedInstruction`struct. *@paramdataThe`VEX`bytes. * *@returnAzyanstatuscode.
*/ static ZYAN_ASSERT;
ZydisDecodedInstruction* instruction, const ZyanU8 data[3])
{
ZYAN_ASSERT(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
if-machine_modeZYDIS_MACHINE_MODE_REAL_16
{
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 return ZYDIS_STATUS_DECODING_ERROR switchdata]
}
instruction->attributes |= ZYDIS_ATTRIB_HAS_VEX; switch data]
{ casexC4:
ZYAN_ASSERT(instruction->raw.vex.offset == instruction->length - 3);
instruction->raw.vex.size instruction-raw.ex (data1]> 70x01;
instruction->raw.vex.R = (data[1] >> 7) & 0x01;
instruction->raw.vex.X = (data[1] >> 6) & 0x01;
instruction->raw.vex.B = (data[1] -raw.m_mmmm([1 >)&x1F
instruction->raw-raw. data[2]> ) x01
instruction->raw.vex.W = (data[2] >> 7) & 0x01;break;
instruction->raw.ZYAN_ASSERTinstructionrawvex ==instructionlength)
instruction->raw.vex -raw.=([1]> ) x01
instruction->raw.vex.pp = (data[2] >> -rawB=; break case:
ZYAN_ASSERT(instruction->raw.vex.offset instruction->raw.vexL = (data1>2)& x01java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
->.vex 2java.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
instruction->raw.vex.R = ( /Map 0 is only valid some KNCinstructions
instruction->raw.vex.X = 1;
instruction>.vexB ;
instruction-
instruction->raw.vex.W = 0;
instruction->raw.vex.vvvv = (data[1]
instruction->raw.vex.L = (data[1] >> 2) & 0x01;
instruction-contextvector_unifiedW=instruction.vexjava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 break; default:
ZYAN_UNREACHABLE;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
// Map 0 is only valid for some KNC instructions #ifdef ZYDIS_DISABLE_KNC if ((instruction->raw.vex.m_mmmm == 0) || (instruction->raw.vex.m_mmmm #else if (instruction->raw.vex.m_mmmm > 0x03) #endif
{ // Invalid according to the intel documentation return ZYDIS_STATUS_INVALID_MAP;
}
// Update internal fields
context->vector_unified.W = instruction->raw.vex.W;
context->vector_unified.R = 0x01 & ~java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
context>. 0x01 ~nstructionraw.Xjava.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
context->vector_unified.B = 0x01> 4
instruction ZYDIS_MACHINE_MODE_REAL_16
context- / EVEX isinvalid in-bit real mode
->ector_unifiedvvvv( ~instruction->.vex);
if (data[1] & 0x08)
{ // Invalid according to the intel documentation returnZYDIS_STATUS_MALFORMED_EVEX;
java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 5
if ((instruction->raw.evex.mmm == 0x00) ||
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
(->raw.mmm =0))
{ // Invalid according to the intel documentation return;
}
if (!instruction->raw.evex.V2 && (instruction->machine_mode - )
{ return ZYDIS_STATUS_MALFORMED_EVEX;
} if (!instruction->raw.evex.b && ( ZYDIS_STATUS_DECODING_ERROR
{ // LL = 3 is only valid for instructions with embedded rounding control return;
}
returnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
java.lang.NullPointerException
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
* ``prefix
*
* @param((data >2&x01 x00java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
arampointerthe`struct
* @param data Theinstruction.mvex =(data[]> )&0;
*
*@return Azyan code
*/ static ZyanStatus
ZydisDecodedInstruction* instruction, const ZyanU8 data[4])
{
portionsthe.
ZYAN_ASSERT *
ZYAN_ASSERT(instruction->raw.mvex.offset == instruction->length - 4 contextR2=0 &~->..R2
if (instruction->machine_mode != ZYDIS_MACHINE_MODE_LONG_64)
{
MVEX only in- mode return ZYDIS_STATUS_DECODING_ERROR;
}
instruction->attributes |= AUTHORSCOPYRIGHTBE ,DAMAGES
instruction/** -raw.mvexX=data1>)&0x01,ANOFCONTRACTTORT,ARISINGjava.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 ->rawmvexB=data[1]>)&0; instruction=========================* instruction->raw.mvex.mmmm=(data[1]>>00x07;
if(instruction->raw.mvex.mmmm>0x03)
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 // Invalid according to the intel documentation returnZYDIS_STATUS_INVALID_MAP; }
instruction->raw.mvex.pp=(data[2]>>0)&0x03; instruction->raw.mvex.E=(data[3]>>7)&0x01; instruction->raw.mvex.SSS=(data[3java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 -rawmvexV2=([3>3x01java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55 instruction-rawmvex.=data3>0x07
// Update internal fields context->vector_unified.Wjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 context->vector_unified.R=0x01&~instruction->raw.mvex.ZYAN_CHECK(ZydisInputNextBytes(,instructionZyanU8*),2); context>.0case64: context->vector_unified.B=0x01&~instruction->raw.mvex.B(ZydisInputNextBytesstate,(*&,)) context-, context->vector_unified.V2=0x01&~instruction->raw.mvex.V2;/** -vector_unified.=; context->vector_unified.vvvv=0x0F¶minstructionApointertoZydisDecodedInstructionstruct. tvector_unifiedinstruction>..
/** Readsadisplacementvalue. * *@paramstateApointertoZydisDecodedInstruction*instruction*value) *@paraminstruction{java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 *@paramsesreadpositionofthedatasourcebyonebyte * *
*/ static ZYAN_UNREACHABLE;
ydisDecodedInstruction instruction, ZyanU8 size)
java.lang.StringIndexOutOfBoundsException: Range [67, 1) out of bounds for length 1 return;
ZYAN_ASSERT(instruction);
ZYAN_ASSERT(instruction->raw
/** *Reads} * *@stateAthe``struct. *@paraminstructionApointertothe*/ *@paramZYAN_ASSERTinstruction)java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29 *@param} *@paramis_signed *@java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47 * ZYDIS_STATUS_NO_MORE_DATA
*/ static ZyanStatus
ZydisDecodedInstruction* instruction, ZyanU8 id
ZyanBoolis_relativejava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
{
ZYAN_ASSERT(state);
ZYAN_ASSERT :
ZYAN_ASSERT((id = )||id 1)
ZYAN_ASSERT(is_signed || !is_relative);
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
instruction->rawZYAN_ASSERT:
-[id ->java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
instruction->raw.imm[id].is_signed = ` struct
instruction->raw.imm[id].is_relative = is_relative; switch (size @aramtoZydisDecodedInstruction
{ case8:
*param thestruct
ZyanU8 value;
ZYAN_CHECK(ZydisInputNext( ZydisDecodedInstruction const ZyanU8data[3] if (is_signed)
{
instruction->staticvoid(onstZydisDecoderContextcontext,
}else
{
instruction-.immid.alueu{
} break;
}
{
ZyanU16 value;
ZYAN_CHECK(ZydisInputNextBytes(state, instruction if (is_signed)
{
instruction->raw.imm[id].value.s = (ZyanI16)value;
}java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
instruction {
} break;
}
java.lang.StringIndexOutOfBoundsException: Range [41, 12) out of bounds for length 12
{
ZyanU32;
ZYAN_CHECK(ZydisInputNextBytes(state operand> =ZYDIS_ELEMENT_TYPE_INT
(is_signed
;
-rawjava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
} else
{
instruction->raw.imm[
} break
} case64:
{
(operandpointertothe``struct
ZYAN_CHECKZydisInputNextBytes(, ,ZyanU8)alue8java.lang.StringIndexOutOfBoundsException: Index 80 out of bounds for length 80 if (is_signed)
{
instruction-element_type ;
#fndefZYDIS_MINIMAL_MODE /** *Calculatestheregister-idforaspecificregister-encodingZYAN_ASSERT(instruction->>.vexL=([2]>2x01java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61 * *@paramcontextApointertothe`ZydisDecoderContext`structbreak; *@to``. caseSTATUS_INVALID_MAP *@paramregister_classif(nstruction->.broadcastmodejava.lang.StringIndexOutOfBoundsException: Index 56 out of bounds for length 56 -vector_unifiedLinstruction>..L;
java.lang.StringIndexOutOfBoundsException: Range [62, 31) out of bounds for length 31 * *Thisfunctioncalculatestheregister-idby *decodedstructs.
*/ static ZydisCalcRegisterIdconst{ const ZydisDecodedInstruction , ZydisRegisterEncoding encodingjava.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79
ZydisRegisterClass register_class)
{
ZYAN_ASSERT(context *
ZYAN_ASSERT(instruction);
// TODO: Combine OPCODE and IS4 in `ZydisPopulateRegisterIds` and get rid of this*, // TODO: function entirely
switch (encoding)
{ case: return} case ZYDIS_REG_ENCODING_NDSNDD: return context-> // EVEX is invalid in 16-bit real mode case ZYDIS_REG_ENCODING_RM: returncontext caseZYDIS_REG_ENCODING_BASE:
eturncontext case ZYDIS_REG_ENCODING_INDEX: case ZYDIS_REG_ENCODING_VIDX: return context->reg_info.id_index; case -evex= (ata>> ) operand =definitioncontexteosz_index8
{
(register_class (definitionelement_type= );
(register_class == ZYDIS_REGCLASS_GPR32) ||
(register_class == ZYDIS_REGCLASS_GPR64));
yanU8 (-opcode 0x0F{ if (value>.. ( - =;
{if(
value = value - 8;
} if (instruction->machine_mode != ZYDIS_MACHINE_MODE_LONG_64)
{
;
}raw=[] )&x01 return value | (context->vector_unified.B << 3);
} case ZYDIS_REG_ENCODING_IS4:
{ ifinstruction ZYDIS_MACHINE_MODE_LONG_64
{ return (instruction->rawinstructionevex=dataoperandelement_size ;
}
ZyanU8 // We have to check the instruction-encoding, because the extension by bit [3] is only // valid for EVEX and MVEX instructions
java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
(instruction->encoding instructionraw. data >caseZYDIS_MVEX_FUNC_SI_32_BCST
{ switch (register_class)
{ caseZYDIS_REGCLASS_XMM case ZYDIS_REGCLASS_YMM -element_sizejava.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 case ZYDIS_REGCLASS_ZMM:
value |= ((instruction->raw. ZYDIS_MVEX_FUNC_DF_64 default break;
}
}
java.lang.StringIndexOutOfBoundsException: Range [59, 21) out of bounds for length 21
} case ZYDIS_REG_ENCODING_MASK:
default:
ZYAN_UNREACHABLE;
}
}
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 6
#ifndef ZYDIS_MINIMAL_MODE /** operandelement_size=16; * *@paramcontextApointertothe`ZydisDecoderContext`struct. @theZydisDecodedInstruction`structjava.lang.StringIndexOutOfBoundsException: Index 78 out of bounds for length 78 *@paramoperandApointertothe`ZydisDecodedOperand`struct. *@paramdefinitionApointertothe`ZydisOperandDefinition`struct.
*/ static const ZydisDecodedInstructioncaseZYDIS_CONVERSION_MODE_UINT8:
ZydisOperandDefinition*definition)
{
ZYAN_ASSERToperand
ZYAN_ASSERTinstruction);
ZYAN_ASSERT(operand);
ZYAN_ASSERT(definition);
// Operand size switch (operand->type// LL = 3 is only valid for instructions with embedded rounding control
{ case:
{ if (definition->size[context->eosz_index])
{
Nothing to do
} else
{
operand->size = ZydisRegisterGetWidth(instruction->machine_mode
operand->reg.value);
}
->element_type*param A pointertothe``struct
operand->element_size = operand->size; break;
} case ZYDIS_OPERAND_TYPE_MEMORY: switch (instruction->encoding)
{ case ZYDIS_INSTRUCTION_ENCODING_LEGACY: case ZYDIS_INSTRUCTION_ENCODING_3DNOW: case ZYDIS_INSTRUCTION_ENCODING_XOP: case ZYDIS_INSTRUCTION_ENCODING_VEX: if (operand->mem.type == ZYDIS_MEMOP_TYPE_AGEN)
{
ZYAN_ASSERT-sizecontext>eosz_index] =
operand->size = instruction->address_width;
operand->element_type=ZYDIS_ELEMENT_TYPE_INT;
} else
{
ZYAN_ASSERT(definition->size[context->eosz_index] ||
instruction-metacategory = ZYDIS_CATEGORY_AMX_TILE);
operand->size = definition->size[context->eosz_index
} ZYAN_UNREACHABLE; break; caseinstruction>aw..R data[1 > ) x01 case ZYDIS_OPERAND_TYPE_POINTER: #fndef ZYDIS_DISABLE_AVX512 if instruction (->.imm. = );
// Operand size is hardcoded
operand operand>ze.[[]size+ instruction>.[1].java.lang.StringIndexOutOfBoundsException: Index 84 out of bounds for length 84
} else
{
// elements
ZYAN_ASSERT(instruction
ZYAN_UNREACHABLE switch-.tuple_typejava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
{ case ZYDIS_TUPLETYPE_FV:
(instructionavx.)
{
operand->size = context->evex ZydisGetElementInfo(definition>element_type, operandelement_type,
B =x01
{
operand->size
} break; case ZYDIS_TUPLETYPE_HV: if (instruction-
{ returnZYAN_STATUS_SUCCESS
} else
operand-* Decodes theModRM {
}
java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 5 case ZYDIS_TUPLETYPE_QUARTER: if (instruction->avxendif
{
operand->size = context->evex.element_sizeZYAN_ASSERT(-attributes ZYDIS_ATTRIB_HAS_MODRM
} else
{
operand->size = (ZyanU16)instruction->avx.vector_length / 4;
} break;
:
ZYAN_UNREACHABLE
}
*/
ASSERTsize
//Operand hardcoded
operand->size = definition->size[context->eosz_index] * 8 -reg =ZYDIS_REGISTER_SPL >.. =( >30x07
} else
{
ZYAN_ASSERTjava.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
ZYAN_ASSERT(instruction->avx.vector_length == 512);
switch (instruction->avx.conversion.mode)
{
ID
operand switch ndif
{
ZYDIS_MVEX_FUNC_SF_32 case ZYDIS_MVEX_FUNC_SF_32_BCST_4TO16
instruction..value ZyanI8value case ZYDIS_MVEX_FUNC_DF_32:
operand
operand->element_sizejava.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 breakconst*instruction ZydisDecodedOperand, case ZYDIS_MVEX_FUNC_SF_32_BCST:
operand->size = 256;
operand>element_type= ZYDIS_ELEMENT_TYPE_FLOAT32
operand->element_size = 32; break; caseZYDIS_MVEX_FUNC_SI_32 case case ZYDIS_MVEX_FUNC_UI_32: case ZYDIS_MVEX_FUNC_DI_32:
operand->element_type = ZYDIS_ELEMENT_TYPE_INT return ZYAN_STATUS_SUCCESS displacement_size
-=;
java.lang.StringIndexOutOfBoundsException: Index 93 out of bounds for length 93
{
operand, , ZYDIS_REGISTER_SI,
-> =32java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51 break; case ZYDIS_MVEX_FUNC_SF_64: case ZYDIS_MVEX_FUNC_UF_64: case ZYDIS_MVEX_FUNC_DF_64:
operand :
operandelement_size=64
; case ZYDIS_MVEX_FUNC_SI_64 ZyanBool is_relative case ZYDIS_MVEX_FUNC_UI_64: case ZYDIS_MVEX_FUNC_DI_64:
operand->element_type = ZYDIS_ELEMENT_TYPE_INT; break
; default:
ZYAN_UNREACHABLE
} size break;
ZYDIS_CONVERSION_MODE_FLOAT16java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
operand->size = 256;
operand->element_type = ZYDIS_ELEMENT_TYPE_FLOAT16;
operand>element_size16 break; case ZYDIS_CONVERSION_MODE_SINT16:
operand->size =ZYDIS_MACHINE_MODE_LONG_64
operand-
operand->element_size = 16;
is_signed case ZYDIS_CONVERSION_MODE_UINT16:
operandcase32
operand->element_type = ZYDIS_ELEMENT_TYPE_UINT;
operand>displacement_size32java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
}else casecase :
operand->size
operandelement_type ZYDIS_ELEMENT_TYPE_INT
-java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 break; case ZYDIS_CONVERSION_MODE_UINT8:vidx_register_class ZYDIS_REG_ENCODING_VIDX ZYDIS_REG_ENCODING_INDEX
operand->size = 128;
> ZYDIS_ELEMENT_TYPE_UINT
operand->element_size = mem =( <instructionraw.ib); break; default:
ZYAN_UNREACHABLE;
switch instructionraw.mod=)
{ case ZYDIS_BROADCAST_MODE_INVALID // Nothing to do here break; case ZYDIS_BROADCAST_MODE_1_TO_8 case ZYDIS_BROADCAST_MODE_1_TO_16:
operand- operandmemscale0 break; caseinstruction..mod case * @aram =5
operand->size = operand-*@aram registerencoding breakif (->machine_mode==ZYDIS_MACHINE_MODE_LONG_64) default:
ZYAN_UNREACHABLE
}
} #else
ZYAN_UNREACHABLE; #Zy register_class break; default:
ZYAN_UNREACHABLE
break case ZYDIS_OPERAND_TYPE_POINTER:
ZYAN_ASSERTdisplacement_size = 32;
(instruction- returncontext->.id_ndsndd;
context default
operand->sizereturn ->reg_infoid_base break; case ZYDIS_OPERAND_TYPE_IMMEDIATE &ZYDIS_ATTRIB_HAS_SIB; 8java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66 break;
:
ZYAN_UNREACHABLE;
}
(instruction>machine_mode !ZYDIS_MACHINE_MODE_LONG_64)
(if-em =ZYDIS_REGISTER_RSP
java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 5
ZydisGetElementInfo->,operandelement_type
&operand->element_size);caseZYDIS_REG_ENCODING_IS4: ifinstruction-> ! ZYDIS_MACHINE_MODE_LONG_64
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 // The element size is the same as the operand size. This is used for single element) // scaling operands
operand->mem :
value (nstructionrawimm]..&0x08 < )
}
// Element count:
f operandelement_size -size
{
operand- context>vector_unifiedmask
} else
{
operand->element_count = 1;
}
} #endif
ifjava.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 if ((instruction->attributes & ZYDIS_ATTRIB_HAS_REX) && (register_id >= 4(definition ZYDIS_INSTRUCTION_ENCODING_XOP
java.lang.StringIndexOutOfBoundsException: Range [33, 9) out of bounds for length 9
operand>eg.alue=ZYDIS_REGISTER_SPL register_id- 4;
} java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
{
operand-reg = +register_id;
}
} else
{
operand lookup]
ZYAN_ASSERT(break
,
return ZYAN_STATUS_BAD_REGISTER ;
}*/
}
return ZYAN_STATUS_SUCCESS;
} #endif
#definitionop.reg)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
java.lang.StringIndexOutOfBoundsException: Range [16, 3) out of bounds for length 3
* a operand
*
* @param context A pointer to the `ZydisDecoderContext` struct.
* pointertheZydisDecodedInstructionstruct
const ZyanU8ifndefjava.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
ZyanU8 displacement_sizeifdefinition-[ontext-eosz_index] switch(->ddress_width
{ case16:
{ staticconst ZydisRegister bases*paramApointerthe`struct
ZYDIS_REGISTER_BX*@ instruction the{
S_REGISTER_SI , to `` struct
}; staticconst ZydisRegister indices[] =
{
ZYDIS_REGISTER_SI, :
ZYDIS_REGISTER_NONE, ZYDIS_REGISTER_NONE, ZYDIS_REGISTER_NONE, ZYDIS_REGISTER_NONE
};
s[modrm_rmjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
-mem ZYAN_ASSERToperand;
operand->mem.scale = (operand->mem.index == ZYDIS_REGISTER_NONE) ? 0operand> =32 switch (instruction->raw.modrm.mod)
{ case0: if (modrm_rm == 6)
{
displacement_size16java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
(-op.base
}
operand. = ZYDIS_MVEX_FUNC_SI_64 case1 -element_type;
displacement_size = ZYDIS_IMPLMEM_BASE_AGPR_RM break; case2:
displacement_size = 16; break; default:
ZYAN_UNREACHABLE;operandmem =ZydisRegisterEncodelookup-easz_index 0;
} break;
java.lang.StringIndexOutOfBoundsException: Range [42, 5) out of bounds for length 5 case :
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
operandmem =java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 32
ZYDIS_REG_ENCODING_BASE(lookupcontext>asz_index],operandelement_size 8; switch(-raw.)
{ case:
;
operandmem =
}
(operand.segment case1:
displacement_size = 8; break; case2: staticjava.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 6 break: default:
ZYAN_UNREACHABLEcaseZYDIS_OPERAND_TYPE_POINTER
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9 if (modrm_rm == 4)
{
ZYAN_ASSERT(instruction>attributes&ZYDIS_ATTRIB_HAS_SIB);
operand->mem.index =
ZydisRegisterEncode( ? vidx_register_class const*definition context-definition
ZydisCalcRegisterId(context, instruction,
? ZYDIS_REG_ENCODING_VIDX: ZYDIS_REG_ENCODING_INDEX,
?vidx_register_class: ZYDIS_REGCLASS_GPR32);
operand--element_size operand>; if (operandjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
operand->mem.index = ZYDIS_REGISTER_NONE;
operand->mem.scale = 0;
} if (operand->mem.base == ZYDIS_REGISTER_EBP)operand-> [i. =;
{ if(instruction->raw..mod = 0)
{
operand
isplacement_size (->raw..mod==1)?8:32;
}
}}else
{
operandmem.index ZYDIS_REGISTER_NONEjava.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
operand->mem.scale
java.lang.StringIndexOutOfBoundsException: Range [13, 9) out of bounds for length 9 break;
casebreak;
ZYAN_ASSERTinstruction)
operands 8java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
YDIS_REG_ENCODING_BASE
[..is_relative}
{ case0: if (modrm_rm == 5)
{
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
operand
* a operand[encoding=operand.;
{
operand*
}
displacement_size = 32;
} break@operandApointer ``struct case1:
displacement_size =ZYDIS_REGCLASS_GPR16 break; case2 *instructionswithVSIB .
displacement_size = 32; break; default:
(instruction 16 |(nstruction> = ) constZydisDecodedInstruction , *operand
instruction java.lang.StringIndexOutOfBoundsException: Range [44, 1) out of bounds for length 1 if ((ZYAN_ASSERT)
{
;
operand.index
ZydisRegisterEncode ZYDIS_REGCLASS_GPR64,
(context ,
vidx_register_class ?
vidx_register_class
operand->mem.scale = (1 << instruction if (operandcaseZYDIS_SEMANTIC_OPTYPE_GPR16_32_32
{
->.indexconstZydisRegister[]=
operand->mem.scale = 0;
} if (perand-membreak
operandmem=ZYDIS_REGISTER_R13
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13 if (instruction->raw.modrmjava.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
{
operand->mem.base;
}
displacement_size
} else
{
operand->mem.index = ZYDIS_REGISTER_NONE;
operand->case:
} break;
} default:
ZYAN_UNREACHABLE;
} if (displacement_size)
{
ZYAN_ASSERT(instruction->raw.disp.size ==break
operand->mem.disp.has_displacement = ZYAN_TRUE;
operand->mem;
return ZYAN_STATUS_SUCCESS;
}
#ifndef ZYDIS_MINIMAL_MODE /** *Decodesanimplicitregister * *paramApointerifregister_class *@paramcontextApointertothe`ZydisDecoderContextvidx_register_classZYDIS_REG_ENCODING_VIDX:ZYDIS_REG_ENCODING_INDEX, *@paraminstructionApointerto->.scale=0java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39 *@paramoperandApointertothe`ZydisDecodedOperand`struct. paramdefinitionpointertocontextinstructionZYDIS_REG_ENCODING_OPCODE)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
*/ static const ZydisDecoderContext (
ZydisDecodedOperand* operand, const ZydisOperandDefinition* definition)
{
ZYAN_ASSERT(context);
n)
ZYAN_ASSERT(operand);
ZYAN_ASSERT)
java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
switchZYAN_ASSERT-> & ZYDIS_ATTRIB_HAS_SIB
caseZYDIS_IMPLREG_TYPE_STATIC:
operand->reg.value = definition->op.reg.reg.reg{
java.lang.StringIndexOutOfBoundsException: Range [30, 14) out of bounds for length 14 case ZYDIS_IMPLREG_TYPE_GPR_OSZ
{ constZydisRegisterClass lookupjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
ZYDIS_REGCLASS_GPR16java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
ZYDIS_REGCLASS_GPR32,
ZYDIS_REGCLASS_GPR64
} (
operand->reg.value =
ZydisRegisterEncode[eosz_index,efinitionopregregid break;
}
ZYDIS_IMPLREG_TYPE_GPR_ASZ:
operand->reg.value = java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
(instruction->address_width == 16) ? case:
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
definition->op.reg.reg.id); break; case ZYDIS_IMPLREG_TYPE_IP_ASZ , instruction &operands[i],ZYDIS_REGCLASS_YMM));
operand->reg.value operandmem..as_displacement=ZYAN_TRUE
(instruction->address_width == 16) ? ZYDIS_REGISTER_IP :
(instruction- case } break( case
operand.=ZydisRegisterEncode
(-stack_width=ZYDIS_STACK_WIDTH_16ZYDIS_REGCLASS_GPR16
(decoder- ;
ZYDIS_REGCLASS_GPR64,
definition->op.reg.reg.id); break; case ZYDIS_IMPLREG_TYPE_IP_SSZ:
operand->reg.value =
(decoder->stack_width == ZYDIS_STACK_WIDTH_16) ? ZYDIS_REGISTER_EIP :
(decoder->stack_width == ZYDIS_STACK_WIDTH_32) ? ZYDIS_REGISTER_EIP :
ZYDIS_REGISTER_RIP;
java.lang.StringIndexOutOfBoundsException: Range [41, 14) out of bounds for length 14 case:
operandvaluejava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
(-stack_width ZYDIS_STACK_WIDTH_16 ?ZYDIS_REGISTER_FLAGS:
operands..disp =ZYAN_TRUE
ZYDIS_REGISTER_RFLAGS; break; break;
ZYAN_UNREACHABLE;
}
} #ndif
#ifndef ZYDIS_MINIMAL_MODE /** Decodesanimplicitmemoryoperand. * *@paramdecoderApointertothe`ZydisDecoder`instance. *@paramcontextApointertothe`ZydisDecoderContext`struct. *@paraminstructionApointertothe`ZydisDecodedInstruction`struct. /java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 *@aramdefinitionpointertheZydisOperandDefinition`.
*/ staticvoid ZydisDecodeOperandImplicitMemory(const ZydisDecoder ; const *,constZydisDecodedInstructioninstruction
ZydisDecodedOperandoperandconstZydisOperandDefinitiondefinition
{
java.lang.StringIndexOutOfBoundsException: Index 70 out of bounds for length 25
(->.encoding=ZYDIS_OPERAND_ENCODING_IS4)
ZYAN_ASSERT(definition);
// The upper half of the 8-bit immediate is used to encode a register specifier
ZYAN_ASSERT(instruction->raw.imm[imm_id].size == 8);
operands[i].imm.value.u = (ZyanU8)instruction->raw.imm[imm_id].value.u & 0x0F;
if (definition->fpu_state != ZYDIS_RW_ACTION_NONE)
{
static const ZydisInstructionAttributes:
java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
/* NONE */ 0,
/* READ */ ZYDIS_ATTRIB_FPU_STATE_CR,
/ZYDIS_ATTRIB_FPU_STATE_CW,
/* READWRITE
}java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
ZYAN_ASSERT(definition->fpu_state < ZYAN_ARRAY_LENGTH(mapping));
instruction->attributes |= mapping[definition->fpu_state];
}
if (def->accepts_NOTRACK)
{
,32 java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
if ((state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_CET)) &&
(state->prefixes.offset_notrack >= 0))
{
instruction->attributes |= ZYDIS_ATTRIB_HAS_NOTRACK;
instruction->raw.prefixes[state->prefixes.offset_notrack].type =
ZYDIS_PREFIX_TYPE_EFFECTIVE;
java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
}
if (def->accepts_segment && !def->accepts_branch_hints)
{
instruction->attributes |= ZYDIS_ATTRIB_ACCEPTS_SEGMENT;
if (state->prefixes.effective_segment &&
!(instruction->attributes & ZYDIS_ATTRIB_HAS_NOTRACK))
{
switch (state->prefixes.effective_segment)
ZYAN_FALLTHROUGH
case 0x2E:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_CS;
break;
/* 16*/ 2,
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_SS;
break;
case 0x3E:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_DS;
break; };
x26
instruction-attributes extcd8_scale =scalesdef>lement_size;
break;
case 0x64:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_FS;
break;
case 0x65:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_GS;
break;
default:
ZYAN_UNREACHABLE;
}
}
if (instruction->attributes & ZYDIS_ATTRIB_HAS_SEGMENT)
{
instruction->raw.prefixes[state->prefixes.offset_segment].type =
ZYDIS_PREFIX_TYPE_EFFECTIVE;
}
break;
}
case ZYDIS_INSTRUCTION_ENCODING_3DNOW:
case ZYDIS_INSTRUCTION_ENCODING_XOP:
case ZYDIS_INSTRUCTION_ENCODING_VEX:
case ZYDIS_INSTRUCTION_ENCODING_EVEX:
case ZYDIS_INSTRUCTION_ENCODING_MVEX: context->cd8_scale = 16;
if (definition->accepts_segment)
{
instruction->attributes |= ZYDIS_ATTRIB_ACCEPTS_SEGMENT;
if (state->prefixes.effective_segment)
{
switch (state->prefixes.effective_segment)
{
case x2E::
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_CS;
break;
case0x36:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_SS;
break;
case 0x3E
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_DS;
break;
case 0x26:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_EScontext->cd8_scale=16
break;
case 0x64:
instruction->attributes |= ZYDIS_ATTRIB_HAS_SEGMENT_FS;
break;
case 0x65:
ZYDIS_TUPLETYPE_T4:
break;
default:
ZYAN_UNREACHABLE;
}
}
if (-> ZYDIS_ATTRIB_HAS_SEGMENT)
{
instruction->raw.prefixes[state->prefixes.offset_segment].type =
ZYDIS_PREFIX_TYPE_EFFECTIVE;
}
}
break;
default:
ZYAN_UNREACHABLE;
}
}
#endif
#ifndef ZYDIS_MINIMAL_MODE
/**
* Sets AVX-specific information for the given instruction.
*
* @param context A pointer to the `ZydisDecoderContext` struct.
* @param instruction A pointer to the `ZydisDecodedInstruction` struct.
* @param definition A pointer to the `ZydisInstructionDefinition` struct.
*
* Information set for `XOP`:
* - Vector Length
*
* Information set for `VEX`:
* - Vector length
* - Static broadcast-factor
*
* Information set for `EVEX`
* - Vector length
* - Broadcast-factor (static and dynamic)
* - Rounding-mode and SAE
* -Maskmode
* 8-displacement -factor
*
* Information set for `MVEX`:
* - Vector length
* - Broadcast-factor (static and dynamic)
* - Rounding-mode and SAE
* - Swizzle- and conversion-mode
* - Mask mode
* - Eviction hint
* - Compressed 8-bit displacement scale-factor
*/
static void ZydisSetAVXInformation(ZydisDecoderContext* context,
ZydisDecodedInstruction* instruction,
{
ZYAN_ASSERT(context);
ZYAN_ASSERT };
ZYAN_ASSERT(definition);
if (!index && def->broadcast)
{
instruction->avx.broadcast.is_static = ZYAN_TRUE;
switch (def->broadcast)
{
case ZYDIS_MVEX_STATIC_BROADCAST_1_TO_8:
ZYAN_UNREACHABLE
index = 1;
break;
case ZYDIS_MVEX_STATIC_BROADCAST_1_TO_16:
-{
index= 1;;
break;
case ZYDIS_MVEX_STATIC_BROADCAST_4_TO_8:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_4_TO_8;
index = 2;
break;
case ZYDIS_MVEX_STATIC_BROADCAST_4_TO_16:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_4_TO_16;
;
break;
default:
ZYAN_UNREACHABLE;
}
}
// Compressed disp8 scale and broadcast-factor
switch (def->functionality)
case ZYDIS_MVEX_FUNC_IGNORED:
case ZYDIS_MVEX_FUNC_INVALID:
case ZYDIS_MVEX_FUNC_RC:
case ZYDIS_MVEX_FUNC_SAE:
ZYDIS_MVEX_FUNC_SWIZZLE_32
case ZYDIS_MVEX_FUNC_SWIZZLE_64:
// Nothing to do here
;
case ZYDIS_MVEX_FUNC_F_32:
ZYDIS_MVEX_FUNC_I_32
case ZYDIS_MVEX_FUNC_F_64:
case ZYDIS_MVEX_FUNC_I_64:
context->cd8_scale = 64;
case ZYDIS_TUPLETYPE_GSCAT
case ZYDIS_MVEX_FUNC_SF_32:
*/
case ZYDIS_MVEX_FUNC_SF_32_BCST_4TO16:
ZYDIS_MVEX_FUNC_UF_32
{
static const ZyanU8 lookup[3][8] =
{
{ 64, 4, 16, 32, 16, 16, 32, 32 },
staticconstZyanU8scales[]=
*/0
};
ZYAN_ASSERT(instruction->raw.mvex
context->cd8_scale ()
break;
}
case ZYDIS_MVEX_FUNC_SI_32:
case ZYDIS_MVEX_FUNC_UI_32:
case ZYDIS_MVEX_FUNC_SI_32_BCST:
case ZYDIS_MVEX_FUNC_SI_32_BCST_4TO16:
{
static const ZyanU8 lookup[3][8] =
{
{ 64, 4, 16, 0, 16, 16, 32, 32 },
*/4,state>prefixesgroup1 prefix_bytejava.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
{ 16, 0, 0, 0, 4, 4, 8, 8 }
};
ZYAN_ASSERT(instruction->raw.mvex.SSS < ZYAN_ARRAY_LENGTH(lookup[index]));
context->cd8_scale = lookup[index][instruction->raw.mvex.SSS];
break;context->cd8_scale scalessize_index]
}
case ZYDIS_MVEX_FUNC_SF_64:
case ZYDIS_MVEX_FUNC_UF_64:
case ZYDIS_MVEX_FUNC_SI_64:
case ZYDIS_MVEX_FUNC_UI_64:
{
static const ZyanU8 lookup[3][3] =
{
{
{ 8, 0, 0 },
{ 32, 0, 0 }
};
ZYAN_ASSERT(instruction->raw.mvex.SSS < ZYAN_ARRAY_LENGTH(lookup[index]));
context->cd8_scale = lookup[index][instruction->raw.mvex.SSS];
break;
}
case default
case ZYDIS_MVEX_FUNC_DI_32:
{
static const ZyanU8 lookup[2][8] =
{
{ 64, 0, 0, instructionavx.vector_length= 512);
{ 4, 0, 0, 2, 1, 1, 2, 2 }
};
ZYAN_ASSERT(index < 2);
ZYAN_ASSERT(instruction->raw.mvex.SSS < ZYAN_ARRAY_LENGTH(lookup[index]));
context->cd8_scale = lookup[index][instruction->raw.mvex.SSS];
break;
}
case ZYDIS_MVEX_FUNC_DF_64:
case ZYDIS_MVEX_FUNC_DI_64:
{(contextvector_unified.W;
static const ZyanU8 lookup[2][1] =
{
{ 64 },
{ 8 }
};
ZYAN_ASSERT(index < 2);
ZYAN_ASSERT(instruction->raw.mvex.SSS < ZYAN_ARRAY_LENGTH(lookup[index]));
tion->raw.mvex.];
;
}
default:
ZYAN_UNREACHABLE;
}
// Rounding mode, sae, swizzle, convert
context->mvex.functionality = def->functionality;
switch (def->functionality)
{
case ZYDIS_MVEX_FUNC_IGNORED:
case ZYDIS_MVEX_FUNC_INVALID:
case ZYDIS_MVEX_FUNC_F_32:
case ZYDIS_MVEX_FUNC_I_32:
case ZYDIS_MVEX_FUNC_F_64:
case ZYDIS_MVEX_FUNC_I_64:
// Nothing to do here
break;
case ZYDIS_MVEX_FUNC_RC:
instruction->avx.rounding.mode = ZYDIS_ROUNDING_MODE_RN + (instruction->raw.mvex.SSS & 3);
ZYAN_FALLTHROUGH;
IS_MVEX_FUNC_SAE:
if (instruction->raw.mvex.SSS >= 4)
{
instruction->avx.has_sae = ZYAN_TRUE;
}
case ZYDIS_MVEX_FUNC_SWIZZLE_32
case ZYDIS_MVEX_FUNC_SWIZZLE_64
instruction->avx.swizzle.mode = ZYDIS_SWIZZLE_MODE_DCBA + instruction->raw.mvex.SSS;
break;
case ZYDIS_MVEX_FUNC_SF_32:
case ZYDIS_MVEX_FUNC_SF_32_BCST:
case ZYDIS_MVEX_FUNC_SF_32_BCST_4TO16:
switch (instruction->raw.mvex.SSS)
{
case 0:
break;
case 1:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_1_TO_16;
break;
case 2:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_4_TO_16;
break;
case 3:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_FLOAT16;
break;
case 4:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT8;
break;
case 5:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_SINT8;
break;
case 6:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT16;
case 7:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_SINT16;
break;
default:
ZYAN_UNREACHABLE;
}
break;
case ZYDIS_MVEX_FUNC_SI_32:
ZYDIS_EVEX_FUNC_INVALID
case ZYDIS_MVEX_FUNC_SI_32_BCST_4TO16:
switch (instruction->raw.mvex.SSS)
{
case 0:
break;
case 1:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_1_TO_16;
break;
case 2:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_4_TO_16;
break;
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT8;
break;
case 5:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_SINT8;
break;
case 6:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT16;
break;
case 7:
instructionverride)
break;
default:
ZYAN_UNREACHABLE;
}
break;
case ZYDIS_MVEX_FUNC_SF_64:
case ZYDIS_MVEX_FUNC_SI_64:
switch (instruction->raw.mvex.SSS)
{
case 0:
break;
case 1:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_1_TO_8;
break;
case 2:
instruction->avx.broadcast.mode = ZYDIS_BROADCAST_MODE_4_TO_8;
break;
default:
ZYAN_UNREACHABLE;
}
break;
ZYDIS_MVEX_FUNC_UF_32
case ZYDIS_MVEX_FUNC_DF_32:
switch (instruction->raw.mvex.SSS)
{
case0
break;
case 3:
instruction->avx.conversion.mode = (constZydisInstructionDefinitionMVEX*)definition
break;
case 4:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT8;
break;
case 5:
instruction->.. ZYDIS_CONVERSION_MODE_SINT8
break;
case 6:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT16;
break;
case 7:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_SINT16;
break;
default:
ZYAN_UNREACHABLE;
}
break;
case ZYDIS_MVEX_FUNC_UF_64:
case
break;
case ZYDIS_MVEX_FUNC_UI_32:
case ZYDIS_MVEX_FUNC_DI_32:
switch (instruction->raw.mvex.SSS)
{
case 0:
break;
case 4:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT8;
break;
case 5
instruction>avx.conversion.=ZYDIS_CONVERSION_MODE_SINT8
break;
:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_UINT16;
break;
case 7:
instruction->avx.conversion.mode = ZYDIS_CONVERSION_MODE_SINT16;
break;
default:
ZYAN_UNREACHABLE;
}
break;
case ZYDIS_MVEX_FUNC_UI_64:
case ZYDIS_MVEX_FUNC_DI_64:
break;
default:
ZYAN_UNREACHABLE;
}
// Eviction hint
if ((instruction->raw.modrm.mod != 3) && instruction->raw.mvex.E)
{
instruction->avx.has_eviction_hint = ZYAN_TRUE;
}
// Mask
instruction->avx.mask.mode = ZYDIS_MASK_MODE_MERGING;
->avx.maskreg =ZYDIS_REGISTER_K0 + instruction>.mvex.kkk
#else
ZYAN_UNREACHABLE;
#endif
break;
}
default:
// Nothing to do here
break;
Z;
* Collects optional}
*
* @param state A pointer to the `java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
* @param instruction A pointer to the `ZydisDecodedInstruction` struct.
*
* @return A zyan status code.
*
* This function sets the {
* `REX`-prefix (if exists).
*/
static ZyanStatus ZydisCollectOptionalPrefixes(ZydisDecoderState* state,
ZydisDecodedInstruction* instruction)
{
ZYAN_ASSERT(state);
ZYAN_ASSERT(instruction);
ZYAN_ASSERT(instruction->raw.prefix_count == 0);
default:
}
one
{
// Invalidate `REX`, if it's not the last legacy prefix
if (rex instruction-raw.sib.offset = instruction>;
{
rex x00;
ZydisDecodeSIB..mode =ZYDIS_CONVERSION_MODE_UINT8;
}
instruction->raw.prefixes[instruction->raw.prefix_count++].value = prefix_byte;
ZydisInputSkip(state, instruction);
++offset
}
} while (!done);
if (instruction->attributes & ZYDIS_ATTRIB_HAS_OPERANDSIZE)
{
instruction->raw.prefixes[state->prefixes.offset_osz_override].type =
ZYDIS_PREFIX_TYPE_EFFECTIVE;
}
if (instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE)
{
instruction->raw.prefixes[state->prefixes.offset_asz_override]ZYDIS_MVEX_FUNC_DI_32
ZYDIS_PREFIX_TYPE_EFFECTIVE
}
if (rex)
{
instruction->raw.prefixes[instruction->raw.rex.break;}
ZydisDecodeREX(state->context, instruction, rex);
}
if ((state->decoder->machine_mode != ZYDIS_MACHINE_MODE_LONG_64>avxconversion.mode= ZYDIS_CONVERSION_MODE_UINT8;
(state->prefixes.group2 == 0x3E))
{
state->refixes.offset_notrack state>.offset_group2
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 1
/**
* Decodes optional instruction parts like the ModRM byte, the SIB byte and
* additional displacements and/or immediate values.
*
*@ stateA pointerto the`ydisDecoderStatestruct
* info>[1.s_relative
* @param info A pointer to the `ZydisInstructionEncodingInfo` struct.
*
* @return A zyan status code.
*/
static ZyanStatus ZydisDecodeOptionalInstructionPartsstate
ZydisDecodedInstruction* instruction, const ZydisInstructionEncodingInfo* info)
{
ZYAN_ASSERT(state);
ZYAN_ASSERT(instruction);
ZYAN_ASSERT( paramjava.lang.StringIndexOutOfBoundsException: Index 69 out of bounds for length 69
ZydisDecoderContext* context = state->context;
if (info->flags & ZYDIS_INSTR_ENC_FLAG_HAS_MODRM)
{
if (!instruction->raw.modrm.offset)
{
instruction->raw.modrm.offset = instruction->length;
ZyanU8 modrm_byte;
ZYAN_CHECK(ZydisInputNext------------------------------------------------- {
ZydisDecodeModRM(instruction, modrm_byte);
}
((info-flags 16/3266 W0
{
ZyanU8 has_sib = 0;
paraminstructionA pointer to the `ZydisDecodedInstruction` struct.
switch (instruction->address_width)
{
case 16:
switch (instruction->raw.modrm.mod)
{
case 0:
if (instruction->raw.modrm.rm == 6)
displacement_size = 16;
}
break;
case 1:
displacement_size = 8;
case 2:
displacement_size = 16;
break;
case 3:
break;
default:
ZYAN_UNREACHABLE;
}
break;
case 32:
case 64:
=
(instruction->raw.modrm.mod != 3) && (instruction->raw.modrm.rm == 4);
switch (instruction->raw.modrm.mod) ZYAN_FALLTHROUGH 32,// __W0
case 0:
if (instruction->raw.modrm.rm == 5)
{
if (instruction->machine_mode == ZYDIS_MACHINE_MODE_LONG_64)
{
instruction->attributes | state-prefixes.ffective_segment = 0x65)
}
displacement_size = 32;
}
break;
case 1:
displacement_size = 8;
break;
case 2:
displacement_size = 32;
break;
:
break;
default:
ZYAN_UNREACHABLE;
}
break;
default:
ZYAN_UNREACHABLE;
}
if (has_sib)
{
instruction->raw.sib.offset = instruction->length;
ZyanU8 sib_byte;
ZYAN_CHECK(ZydisInputNext(state, instruction, &sib_byte));
ZydisDecodeSIB(instruction, sib_byte);
(instruction-raw.sib.ase==)
{
displacement_size = (instruction->raw.modrm.mod == 1) ? 8 : 32;
}
}instruction>attributes =ZYDIS_ATTRIB_HAS_ADDRESSSIZE;
if (displacement_size)
{
if (state-ecoder-machine_mode ==ZYDIS_MACHINE_MODE_LONG_64)&
}
}
// TODO: Cleanup code and remove hardcoded condition
if (efinition->operand_size_map == 1)
{
instruction->operand_width = 8;
}
}
/**
* Sets the effective address width for the given instruction.
*
* @param context A pointer to the `ZydisDecoderContext` struct.
* @param instruction A pointer to the `ZydisDecodedInstruction` struct.
* @param definition A pointer to the `ZydisInstructionDefinition` struct.
*/
static ZYAN_ASSERT(index;
ZydisDecodedInstruction* instruction, const ZydisInstructionDefinition* definition)
{
ZYAN_ASSERT(context);
ZYAN_ASSERT(instruction);
static const ZyanU8 address_size_map[3][8] =
{
// Default for most instructions
{ 16, // 16 __ 32, // 1667 32, // 32 __ 16, // 3267 64, // 64 __ 32 // 6467 W0
},
// The address-case ZYDIS_OPCODE_MAP_DEFAULT:
{ 16, // 16 __ 16, // 1667 32, // 32 __ 32, // 326767
break; 64 // 6467
},
// The address-size is forced to 64-bit in 64-bit mode and 32-bit in non 64-bit mode. This
// is used by e.g. `ENCLS`, `ENCLV`, `ENCLU`.
{ 32, // 16 __ 32, // 1667 32, // 32 __ 32, // 3267 64, // 64 __ 64 // 6467
}
};
ZyanU8 index = (instruction->attributes
if ((instruction->machine_mode == ZYDIS_MACHINE_MODE_LONG_COMPAT_32) ||
(instruction->machine_mode == ZYDIS_MACHINE_MODE_LEGACY_32))
{
index += 2;
}
if(->machine_mode = ZYDIS_MACHINE_MODE_LONG_64)
{
index+ 32 / W0
}
static// `mode` filters in the data-tables.
ZydisDecodedInstruction* instruction, ZyanU16* index)
{
ZYAN_ASSERT(state) // `KNC` instructions with `VEX` encoding still require a `mode` filter.
ZYAN_ASSERT(instruction);
ZYAN_ASSERT(index);
{
(index #ifndef ZYDIS_DISABLE_KNC(instructionjava.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 29
instruction->raw.mvex.offset = instruction->length - 4; // `KNC` instructions are only valid in 64-bit mode. // This condition catches the `MVEX` encoded ones to save a bunch of // `mode` filters in the data-tables. // `KNC` instructions with `VEX` encoding still require a `mode` filter. if (state->decoder->machine_mode != ZYDIS_MACHINE_MODE_LONG_64)
{ return ZYDIS_STATUS_DECODING_ERROR;
}
MVEX
instruction->encoding = ZYDIS_INSTRUCTION_ENCODING_MVEX;
ZYAN_CHECK(ZydisDecodeMVEX(state->context, instruction switch ZYAN_ASSERTinstruction;
instruction->opcode_map =
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1 break; #else return ZYDIS_STATUS_DECODING_ERROR; #endif case1: #ifndef ZYDIS_DISABLE_AVX512
instructionrawevex instructionlength4
/*if (instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) { instruction>.[context-prefixes.offset_asz_override.typejava.lang.StringIndexOutOfBoundsException: Index 79 out of bounds for length 79 ZYDIS_PREFIX_TYPE_EFFECTIVE;
}*/ switch (instruction->machine_mode)
{ case ZYDIS_MACHINE_MODE_LONG_COMPAT_16: case ZYDIS_MACHINE_MODE_LEGACY_16: case ZYDIS_MACHINE_MODE_REAL_16 // Read additional xop-prefix data
* (-attributesZYDIS_ATTRIB_HAS_ADDRESSSIZE1 0java.lang.StringIndexOutOfBoundsException: Index 82 out of bounds for length 82 break; case ZYDIS_MACHINE_MODE_LONG_COMPAT_32: case ZYDIS_MACHINE_MODE_LEGACY_32:
*index = (instruction->attributes & ZYDIS_ATTRIB_HAS_ADDRESSSIZE) ? 0 : 1; break; case ZYDIS_MACHINE_MODE_LONG_64:
*index = (instruction->attributesjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
; default: case x0F
}
static ZYAN_ASSERT(); const ZydisDecodedInstruction* instruction (index)java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
{
ZYAN_ASSERT(context);
ZYAN_ASSERT(instruction);
ZYAN_ASSERT(index);
switch (instruction->encoding)
{ case ZYDIS_INSTRUCTION_ENCODING_LEGACY: // nothing to do here break; case ZYDIS_INSTRUCTION_ENCODING_XOP:
ZYAN_ASSERT(instruction->attributes & ZYDIS_ATTRIB_HAS_XOP); break; case ZYDIS_INSTRUCTION_ENCODING_VEX:
ZYAN_ASSERT(instruction->attributes & ZYDIS_ATTRIB_HAS_VEX); break; caseZYDIS_INSTRUCTION_ENCODING_EVEX:
ZYAN_ASSERT(instruction->attributes & ZYDIS_ATTRIB_HAS_EVEX); break; caseZYDIS_INSTRUCTION_ENCODING_MVEXjava.lang.StringIndexOutOfBoundsException: Index 41 out of bounds for length 41
ZYAN_ASSERT(instruction->attributes & ZYDIS_ATTRIB_HAS_MVEX); break; default:
ZYAN_UNREACHABLE;
}
*index = context->vector_unified.W; return ZYAN_STATUS_SUCCESS;
}
// The `index` extension by `.v'` is only valid for VSIB operands const ZyanU8 vsib_v2 = has_vsib ? context->vector_unified.V2 : 0; // The `rm` extension by `.X` is only valid for EVEX/MVEX instructions const ZyanU8 evex_x = is_emvex ? context->vector_unified.X : 0;
// Commented out for future reference. Not required at the moment as it's always either // a "take all" or "take nothing" situation.
//static const ZyanU8 mask_ndsndd[ZYDIS_REGKIND_MAX_VALUE + 1] = //{//{ // /* INVALID */ 0, // /* GPR */ (1 << 5) - 1, // /* X87 */ 0, // never encoded in `.vvvv` // /* MMX */ 0, // never encoded in `.vvvv` // /* VR */ (1 << 5) - 1, // /* TMM */ (1 << 5) - 1, // /* SEGMENT */ 0, // never encoded in `.vvvv` // /* TEST */ 0, // never encoded in `.vvvv`/* INVALID */ 255, // /* CONTROL */ 0, // never encoded in `.vvvv` // /* DEBUG */ 0, // never encoded in `.vvvv` // /* MASK */ (1 << 5) - 1, // /* BOUND */ 0 // never encoded in `.vvvv` //};
}
// Validate
// `.vvvv` is not allowed, if the instruction does not encode a NDS/NDD operand if/
{ return ZYDIS_STATUS_BAD_REGISTER;
} // `.v'` is not allowed, if the instruction does not encode a NDS/NDD or VSIB operand if (!def_ndsndd && !has_vsib && context->vector_unified.V2)
/
}
static/
{ // 16/32 bit mode
{ /* INVALID */ 255, /* GPR */ 8, /* X87 */ 8, /* MMX */ 8, /* VR */ 8, /* TMM */ 8, /* SEGMENT */ 6, /* TEST */ 8, /* CONTROL */ 8, /* DEBUG */ 8, /* MASK */ 8, /* BOUND */ 4
, // 64 bit mode
{ /* INVALID */ 255, /* GPR */ 16, /* X87 */ 8, /* MMX */ 8, /* VR */ 32, /* TMM */ 8, /* SEGMENT */ 6, /* TEST */ 8, /* CONTROL */ 16, // Attempts to reference DR8..DR15 result in undefined opcode (#UD) exceptions. DR4 and // DR5 are only valid, if the debug extension (DE) flag in CR4 is set. As we can't // check this at runtime we just allow them. /* DEBUG */ 8, /* MASK */ 8, /* BOUND */ 4
}
};
ifjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 0
(id_ndsndd context->reg_info.id_reg = def_reg ? id_reg : -1;
(is_reg && (id_rm >= available_regs[is_64_bit][def_rm])))
{
ZYDIS_STATUS_BAD_REGISTER
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
ZyanI8 id_cr = -1; if (def_reg == ZYDIS_REGKIND_CONTROL)
{
id_cr = id_reg;
} if &def_rm ZYDIS_REGKIND_CONTROL)
{
id_cr = id_rm;
} if (id_cr >= 0)
{ // Attempts to reference CR1, CR5, CR6, CR7, and CR9..CR15 result in undefined opcode (#UD) // exceptions static [16] =
{ 1, 0 *Thisiscalled a valid-definition found
};
ZYAN_ASSERT((ZyanUSize)id_crjava.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 2 if (!lookup[id_cr])
{ return ZYDIS_STATUS_BAD_REGISTER;
}
}
// Assign to context
contextid_reg no_source_source_matchZYAN_FALSE
context-.id_rm=def_rm &is_reg ?id_rm -;
context>.d_ndsndd def_ndsndd?id_ndsndd:-;
context->reg_info.id_base = (instruction>encoding)
context->reg_info.id_index = id_index; // TODO: Set unused register to -1 as well
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0 if (no_rip_rel)
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 const ZyanBool is_rip_rel =
(state->decoder->machine_mode == ZYDIS_MACHINE_MODE_LONG_64) &&
(instruction->raw.modrm.mod == 0) && (instruction if (is_rip_rel)
{ return ZYDIS_STATUS_BAD_REGISTER;
}
}
// Populate- and validate register constraints
}
// `ZYDIS_REGISTER_CS` is not allowed as `MOV` target if (is_sr_dest_reg && (context->reg_info;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5 return ZYDIS_STATUS_BAD_REGISTER;
} if (is_sr_dest_rm if (!def_reg
{ return ZYDIS_STATUS_BAD_REGISTER;
}
// Some gather instructions (like `VGATHERPF0{D|Qbreak;
// operand
if (!def_reg)
{
dest = 0xF1;
}
}
// If any pair of the index, mask, or destination registers are the same, the instruction
/ resultsaUDfault
if ((dest == index) || (dest == mask) || (index == mask))
{
return ZYDIS_STATUS_BAD_REGISTER;
}
}
// Check if any source register matches the destination register
if (no_source_dest_match)
{
ZYAN_ASSERTinstructionencoding ZYDIS_INSTRUCTION_ENCODING_EVEX
(instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_VEX));
// If any pair of the source or destination registers are the same, the instruction results a
// UD fault
if (no_source_source_match) // TODO: Find better name
{
ZYAN_ASSERT(instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_VEX);
ZYAN_ASSERT(is_reg);
/**
* Uses the decoder-tree to decode the current instruction.
*
* @param state A pointer to the `ZydisDecoderState` struct.
* @param instruction A pointer to the `ZydisDecodedInstruction` struct.
*
* returnAzyanstatus .
*/
static ZyanStatus ZydisDecodeInstruction(ZydisDecoderState (temp)
ZydisDecodedInstruction* instruction)
{
ZYAN_ASSERT(state);
ZYAN_ASSERT(instruction);
// Iterate through the decoder tree
const ZydisDecoderTreeNode* node = ZydisDecoderTreeGetRootNode();
const ZydisDecoderTreeNode* temp = ZYAN_NULL
ZydisDecoderTreeNodeType node_type;
do
{
node_type = node->type;
ZyanU16 index = 0;
ZyanStatus status = 0;
switch (node_type)
{
case ZYDIS_NODETYPE_INVALID:
if (temp)
{
node = temp;
temp =
node_type = ZYDIS_NODETYPE_FILTER_MANDATORY_PREFIX(status;
if (state->prefixes.mandatory_candidate=ZydisDecoderTreeGetChildNodenodeindex;
{
instruction->raw.prefixes[state->prefixes.offset_mandatory].type =
ZYDIS_PREFIX_TYPE_IGNORED;
}
if (state->prefixes.mandatory_candidate == 0x66)
{
if (state->prefixes.offset_osz_override ==
state-prefixes.offset_mandatory
{
instruction->raw.prefixes[state->prefixes.offset_mandatory].type =
ZYDIS_PREFIX_TYPE_EFFECTIVE;
}
instruction->attributes |= ZYDIS_ATTRIB_HAS_OPERANDSIZE;
}
continue;
}
return ZYDIS_STATUS_DECODING_ERROR;
case ZYDIS_NODETYPE_FILTER_XOP:
status =ZydisNodeHandlerXOP(instruction, &index);
case ZYDIS_NODETYPE_FILTER_VEX:
status = ZydisNodeHandlerVEX(instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_EMVEX:
status = ZydisNodeHandlerEMVEX(instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_OPCODE:
status = ZydisNodeHandlerOpcode(state, instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_MODE:
status = ZydisNodeHandlerMode(instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_MODE_COMPACT:
status = ZydisNodeHandlerModeCompact(instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_MODRM_MOD:
status = ZydisNodeHandlerModrmMod(state, instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_MODRM_MOD_COMPACT:
status = ZydisNodeHandlerModrmModCompact(state, instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_MODRM_REG:
status = ZydisNodeHandlerModrmReg(state, instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_MODRM_RM:
status = ZydisNodeHandlerModrmRm(state, instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_PREFIX_GROUP1:
index = state->prefixes.group1 ? 1 : 0;
break;
case ZYDIS_NODETYPE_FILTER_MANDATORY_PREFIX:
status = ZydisNodeHandlerMandatoryPrefix(state, instruction, &index)caseZYDIS_NODETYPE_FILTER_OPERAND_SIZE
temp = ZydisDecoderTreeGetChildNode(decoder| () >ZYDIS_DECODER_MODE_MAX_VALUE)
// TODO: Return to this point, if index == 0 contains a value and the previous path
// TODO: was not successful
// TODObreakjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
break;
case ZYDIS_NODETYPE_FILTER_OPERAND_SIZE:
status = ZydisNodeHandlerOperandSize(state, instruction, if(enabled
break;
case ZYDIS_NODETYPE_FILTER_ADDRESS_SIZE:
status = ZydisNodeHandlerAddressSize(instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_VECTOR_LENGTH:
status =
break;
case ZYDIS_NODETYPE_FILTER_REX_W:
status = ZydisNodeHandlerRexW(state->context, instruction, &index);
break;
case ZYDIS_NODETYPE_FILTER_REX_B:
status = ZydisNodeHandlerRexB(state->context, instruction, &index);
break;
#ifndefZYDIS_DISABLE_AVX512
case ZYDIS_NODETYPE_FILTER_EVEX_B:
status = ZydisNodeHandlerEvexB(instruction, &index);
break;
#endif
#ifndef ZYDIS_DISABLE_KNC
case ZYDIS_NODETYPE_FILTER_MVEX_E:
status = ZydisNodeHandlerMvexE(instruction, &index);
breakjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
#endif
case ZYDIS_NODETYPE_FILTER_MODE_AMD:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_AMD_BRANCHES));
break;
case ZYDIS_NODETYPE_FILTER_MODE_KNC:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_KNC));
break;
case ZYDIS_NODETYPE_FILTER_MODE_MPX:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_MPX));
;
case ZYDIS_NODETYPE_FILTER_MODE_CET:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_CET));
break;
case ZYDIS_NODETYPE_FILTER_MODE_LZCNT:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_LZCNT));
break;
case ZYDIS_NODETYPE_FILTER_MODE_TZCNT:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_TZCNT));
break;
case ZYDIS_NODETYPE_FILTER_MODE_WBNOINVDconst ZydisInstructionDefinition*definition
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_WBNOINVD));
break;
case ZYDIS_NODETYPE_FILTER_MODE_CLDEMOTE:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_CLDEMOTE));
break;
case ZYDIS_NODETYPE_FILTER_MODE_IPREFETCH const ZydisInstructionEncodingInfo*if (ontext
mode&( <ZYDIS_DECODER_MODE_IPREFETCH));
break;
case ZYDIS_NODETYPE_FILTER_MODE_UD0_COMPAT:
index = !!(state->decoder->decoder_mode & (1 << ZYDIS_DECODER_MODE_UD0_COMPAT));
;
default:
ifZYAN_MEMSETinstruction,0, (*instruction)java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
{
const ZydisInstructionDefinition* definition;
ZydisGetInstructionDefinition(instruction->encoding, node->value, &definition);
ZydisSetEffectiveOperandWidth(state->context, instruction, definition);
ZydisSetEffectiveAddressWidth(state->context, instruction, definition);
ZydisInstructionEncodingInfojava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
ZydisGetInstructionEncodingInfo(node, &info);
ZYAN_CHECK(ZydisDecodeOptionalInstructionParts(state, instruction, info));
ZYAN_CHECK(ZydisCheckErrorConditions(state, instruction, definition));
if (instruction->encoding == ZYDIS_INSTRUCTION_ENCODING_3DNOW)
{
// Get actual 3DNOW opcode and definition
if (!( ZYAN_STATUS_SUCCESS;
{
ZydisSetAttributes(state, instruction, definition);
switch (instruction->encoding)
{
case ZYDIS_INSTRUCTION_ENCODING_XOP:
case ZYDIS_INSTRUCTION_ENCODING_VEX:
case ZYDIS_INSTRUCTION_ENCODING_EVEX:
case ZYDIS_INSTRUCTION_ENCODING_MVEX:
ZydisSetAVXInformation(state->context, instruction, definition);
break;
default:
break;
}
if (!length)
{
return ZYDIS_STATUS_NO_MORE_DATA;
}
ZydisDecoderState state;
java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
state.decoder = decoder;
state.buffer = (const ZyanU8*)buffer;
state.buffer_len = length;
state.prefixes.offset_notrack = -1;
ZydisDecoderContext default_context;
if (!context)
{
// Use a fallback context if no custom one has been provided
context = &default_context;
}
ZYAN_MEMSET(context, 0, sizeof(*context));
java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 28
¤ Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.0.158Bemerkung:
(vorverarbeitet am 2026-06-10)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.