*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.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.