mirror of https://github.com/x64dbg/zydis
				
				
				
			Fixed priority of mandatory-prefixes
This commit is contained in:
		
							parent
							
								
									58b15163f2
								
							
						
					
					
						commit
						f20dc484cd
					
				|  | @ -61,8 +61,9 @@ typedef struct ZydisDecoderContext_ | |||
|     /**
 | ||||
|      * @brief   Contains the prefix that should be traited as the mandatory-prefix, if the current | ||||
|      *          instruction needs one. | ||||
|      *          0x66 has precedence over 0xF3/0xF2 and the last 0xF3/0xF2 has precedence over  | ||||
|      *          previous ones. | ||||
|      *           | ||||
|      *          The last 0xF3/0xF2 prefix has precedence over previous ones and 0xF3/0xF2 in  | ||||
|      *          general has precedence over 0x66. | ||||
|      */ | ||||
|     uint8_t mandatoryCandidate; | ||||
|     /**
 | ||||
|  | @ -462,6 +463,7 @@ static ZydisStatus ZydisDecodeMVEX(ZydisDecoderContext* context, ZydisInstructio | |||
|     context->cache.B                = 0x01 & ~info->details.mvex.B; | ||||
|     context->cache.R2               = 0x01 & ~info->details.mvex.R2; | ||||
|     context->cache.V2               = 0x01 & ~info->details.mvex.V2; | ||||
|     context->cache.LL               = 2; | ||||
|     context->cache.v_vvvv           =  | ||||
|         ((0x01 & ~info->details.mvex.V2) << 4) | (0x0F & ~info->details.mvex.vvvv); | ||||
| 
 | ||||
|  | @ -706,17 +708,11 @@ static ZydisStatus ZydisCollectOptionalPrefixes(ZydisDecoderContext* context, | |||
|             ++info->details.prefixes.hasF0; | ||||
|             break; | ||||
|         case 0xF2: | ||||
|             if (context->mandatoryCandidate != 0x66) | ||||
|             { | ||||
|                 context->mandatoryCandidate = 0xF2; | ||||
|             } | ||||
|             context->mandatoryCandidate = 0xF2; | ||||
|             ++info->details.prefixes.hasF2; | ||||
|             break; | ||||
|         case 0xF3: | ||||
|             if (context->mandatoryCandidate != 0x66) | ||||
|             { | ||||
|                 context->mandatoryCandidate = 0xF3; | ||||
|             } | ||||
|             context->mandatoryCandidate = 0xF3; | ||||
|             ++info->details.prefixes.hasF3; | ||||
|             break; | ||||
|         case 0x2E:  | ||||
|  | @ -744,7 +740,10 @@ static ZydisStatus ZydisCollectOptionalPrefixes(ZydisDecoderContext* context, | |||
|             context->lastSegmentPrefix = 0x65; | ||||
|             break; | ||||
|         case 0x66: | ||||
|             context->mandatoryCandidate = 0x66; | ||||
|             if (!context->mandatoryCandidate) | ||||
|             { | ||||
|                 context->mandatoryCandidate = 0x66; | ||||
|             } | ||||
|             ++info->details.prefixes.has66; | ||||
|             info->attributes |= ZYDIS_ATTRIB_HAS_OPERANDSIZE; | ||||
|             break; | ||||
|  | @ -2401,10 +2400,6 @@ static void ZydisSetAVXInformation(ZydisDecoderContext* context, | |||
| 
 | ||||
| /* ---------------------------------------------------------------------------------------------- */ | ||||
| 
 | ||||
| // TODO: Update attributes after a valid instruction was found
 | ||||
| 
 | ||||
| /* ---------------------------------------------------------------------------------------------- */ | ||||
| 
 | ||||
| static ZydisStatus ZydisNodeHandlerXOP(ZydisInstructionInfo* info, uint16_t* index) | ||||
| { | ||||
|     ZYDIS_ASSERT(info); | ||||
|  | @ -2625,7 +2620,6 @@ static ZydisStatus ZydisNodeHandlerOpcode(ZydisDecoderContext* context, | |||
|         } | ||||
|         break; | ||||
|     case ZYDIS_INSTRUCTION_ENCODING_3DNOW: | ||||
|         // TODO: We need to change this
 | ||||
|         // All 3DNOW (0x0F 0x0F) instructions are using the same operand encoding. We just 
 | ||||
|         // decode a random (pi2fw) instruction and extract the actual opcode later.
 | ||||
|         *index = 0x0C; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue